Acegi Security는 J2EE 기반의 엔터프라이즈 소프트웨어 애플리케이션에 대한 포괄적인 보안 서비스를 제공한다. 특히 엔터프라이즈 소프트웨어 개발을 주도하고 있는 J2EE 솔루션인 Spring 프레임워크를 이용하여 개발되는 프로젝트를 지원한다는 장점이 있다. 여러분이 엔터프라이즈 애플리케이션을 개발하는데 있어 Spring 프레임워크를 사용하고 있지 않다면 Spring 프레임워크를 좀 더 가까이 지켜볼 필요가 있다고 말하고 싶다. 여러분이 Spring 프레임워크, 특히 의존성 주입(dependency injection) 원리에 익숙하다면 여러분은 Acegi Security에 훨씬 더 쉽게 익숙해질 것이다.
사람들이 Acegi Security를 사용하는 이유는 여러가지가 있는데, 대부분은 J2EE의 서블릿 스펙이나 EJB 스펙이 일반적인 엔터프라이즈 애플리케이션 시나리오에서 필요로 하는 수준의 기능이 부족하다는 것을 깨닫고 난 이후의 프로젝트에서부터 사용한다. 이러한 것들이 표준으로 언급되고 있기는 하지만, 이러한 표준들이 WAR나 EAR 차원의 이식성을 갖추고 있지 않다는 것을 인식하는 것이 중요하다. 그러므로 만약 여러분이 서버 환경을 교체한다면 보통 여러분이 개발한 애플리케이션의 보안 관련 설정들을 새로운 대상 환경에 맞게 재구성하기 위해 해야할 일들이 많을 것이다. Acegi Security를 사용하면 이러한 문제들을 극복할 수 있으며, 게다가 갖가지 다른 유용하고 완전히 조정가능한 보안 기능들을 사용할 수 있다.
아마 여러분도 알고 있겠지만, 보안을 구성하는 주요 오퍼레이션에는 두 가지가 있다. 그 중 첫 번째는 "인증(authentication)"으로 알려져 있으며 인증 주체(principal)가 누구라는 것을 주장하는 과정이다. 인증주체(principal)는 일반적으로 여러분의 애플리케이션에서 특정한 행위를 수행할 수 있는 사용자나, 디바이스 혹은 다른 시스템을 의미한다. 권한부여(authorization)는 인증주체가 여러분의 애플리케이션에서 특정 행위를 수행하도록 허가되었는지를 결정하는 과정을 의미한다. 권한부여에 대한 결정이 필요한 지점까지 도달하려면 그 전에 이미 인증주체의 신원이 인증절차에 의해 수립되어야 한다. 이러한 개념들은 공통적으로 사용되는 것들이며, Acegi Security에만 특화되어 있는 것은 아니다.
인증 차원에서 보았을 때 Acegi Security는 광범위한 인증 모델을 지원한다. 이러한 인증 모델들의 대다수는 써드 파티에서 제공하거나, 아니면 IETF(Internet Engineering Task Force)와 같은 관련 표준 단체에 의해 개발된다. 더불어 Acegi Security는 독자적인 인증 기능을 제공하고 있는데, 구체적으로 말하자면 현재 아래에 나열되어 있는 인증 모델들을 모두 지원한다:
HTTP BASIC 인증 헤더(IETF RFC 기반 표준)
HTTP 다이제스트(Digest) 인증 헤더(IETF RFC 기반 표준)
HTTP X.509 클라이언트 인증서 교환(IETF RFC 기반 표준)
LDAP (교차 플랫폼, 특히 여러 환경에서 인증을 해야 할 필요가 있을 경우의 가장 일반적인 접근법)
폼 기반 인증(단순한 사용자 인터페이스 요구사항에 적합)
Computer Associates Siteminder
JA-SIG 통합 인증 서비스(JA-SIG Central Authentication Service) (CAS로도 알려져 있는 대중적인 오픈 소스 싱글 사인 온(Single Sign On) 시스템)
RMI(원격 메소드 호출; Remote Method Invocation) 및 HttpInvoker(Spring 원격 프로토콜)에 대한 투명한 인증 컨텍스트 전달
자동 "remember-me" 인증(미리 정의되어 있는 시간동안은 재인증을 수행할 필요가 없음)
익명 인증(Anonymous authentication) (모든 요청이 자동적으로 일정한 보안 식별성을 지니고 있다고 가정하게 함)
Run-as 인증(만약 누군가가 다른 보안 신원을 이용하여 진행해야만 하는 요청에 유용)
자바 인증 및 권한부여 서비스(JAAS; Java Authentication and Authorization Service)
JBoss, Jetty, Resin, Tomcat과의 컨테이너 통합 (원한다면 컨테이너 관리 인증(Container Manager Authentication)을 그대로 사용할 수 있음)
여러분의 독자적인 인증 시스템 (하단 참조)
수많은 독립 소프트웨어 벤더(ISV; independent software vendors)들이 Acegi Security가 제공하는 풍부한 인증 모델로 인해 Acegi Security를 도입하고 있다. 그렇게 함으로써 독립 소프트웨어 벤더들은 최종 사용자가 원하는 어떤 것도 갖가지 기술적인 작업이나 클라이언트 환경을 변경하지 않고도 재빨리 자사의 솔루션에 통합할 수 있다. 만약 위의 인증 메커니즘들 중에서 여러분의 요구사항에 적합한 것이 없더라도 Acegi Security는 개방 플랫폼이므로 여러분은 여러분의 독자적인 인증 메커니즘을 상당히 간단하게 작성할 수 있다. 수많은 Acegi Security의 기업 사용자들은 특정 보안 표준을 따르지 않는 "레거시(legacy)" 시스템과 통합해야할 필요가 있는데 Acegi Security는 그러한 시스템에 대한 작업을 매우 용이하게 할 수 있다.
간혹 단순히 인증 절차만으로는 충분하지 않을 때가 있다. 간혹 여러분은 인증 주체가 여러분의 애플리케이션과 상호작용하는 방법에 기반하여 보안을 차별화해야할 때도 있다. 예를 들면 여러분은 훔쳐보는 자(eavesdropping)으로부터 비밀번호를 보호하거나 중간자 공격(man-in-the-middle attack)으로부터 최종 사용자를 보호하기 위해 HTTPS로만 요청이 도착한다는 것을 보장해야할 수도 있다. 아니면 여러분은 실제로 사람이 요청을 만들어 내며, 로봇이나 다른 자동화된 프로스세스에 의해 요청이 만들어지지 않는다는 것을 보장하고자 할 수도 있다. 이렇게 하는 것은 특히 무차별 대입 공격(brute force attacks)로부터 비밀번호 복구 프로세스를 보호하거나 아니면 단순히 사람들이 애플리케이션의 중요 내용을 복제하는 것을 어렵게 만드는데 도움이 될 것이다. 여러분이 이러한 목적들을 달성토록 하기 위해 Acegi Security는 인간 사용자 감지(human user detection)를 위한 JCaptcha 통합과 더불어 자동화된 "채널 보안(channel security)"을 완벽하게 지원한다.
인증이 어떻게 이루어지는 것에 관계없이 Acegi Security는 심도있는 권한부여 기능을 제공한다. 권한부여의 측면에는 세 가지 주요 영역이 존재하는데, 이러한 영역에는 웹 요청에 대한 권한부여, 호출가능한 메소드에 대한 권한부여, 개별 도메인 객체 인스턴스에의 접근에 대한 권한부여가 있다. 여러분이 각각의 차이점을 이해하는 것을 돕자면, 서블릿 스펙의 웹 패턴 보안, EJB 컨테이너 관리 보안(Container Managed Security) 및 파일 시스템 보안에서 찾아볼 수 있는 권한부여로 생각하면 된다. Acegi Security는 이러한 모든 중요 영역에 있어 깊이 있는 보안 기능들을 제공해 주며, 이러한 것들은 본 참조 문서의 후반부에서 알아볼 것이다.