20장. 공통적인 권한부여 개념

20.1. 권한부여(Authorities)

인증 섹션에서 간략하게 언급했듯이 모든 Authentication 구현체들은 GrantedAuthority 객체의 배열을 저장할 필요가 있다. 이러한 GrantedAuthority 객체의 배열은 인증 주체에 허용된 권한들을 나타낸다. GrantedAuthority 객체는 AuthenticationManager에 의해 Authentication 객체에 삽입되며 차후에 권한부여에 관한 의사결정을 할 경우 AccessDecisionManager에 의해 읽어들여진다.

GrantedAuthority는 다음의 메소드만을 포함하고 있는 인터페이스이다:

public String getAuthority();

이 메소드는 AccessDecisionManager들이 GrantedAuthority에 대한 정확한 String 표현을 획득하도록 한다. String 표현으로 반환하므로 GrantedAuthority는 대부분의 AccessDecisionManager들에 의해 손쉽게 "읽혀 들여"질 수 있다. GrantedAuthority가 정확히 String로 표현되지 못할 경우 GrantedAuthority는 "복합적(complex)"인 것으로 간주될 것이며 getAuthority()메소드는 null을 반환해야 한다.

복합적인 GrantedAuthority의 예는 서로 다른 고객 계좌 번호에 적용되는 오퍼레이션의 목록과 보안 진입점들을 저장하는 구현체를 들 수 있다. 이러한 복합적인 GrantedAuthorityString으로 표현하는 것은 상당히 복잡할 것이며, 그리고 그 결과 getAuthority() 메소드는 null을 반환해야만 한다. 이는 모든 AccessDecisionManagerGrantedAuthority의 내용을 이해하기 위해 GrantedAuthority 구현체를 상세하게 지원할 필요가 있음을 나타낸다.

Acegi Security에는 GrantedAuthorityImpl이라는 이름의 GrantedAuthority 구현체가 포함되어 있다. GrantedAuthorityImpl은 모든 사용자에 특징적인 StringGrantedAuthority로 변환될 수 있도록 해준다. 모든 AuthenticationProvider에는 Authentication 객체에 정보를 입력하는데 있어 GrantedAuthorityImpl을 이용하는 보안 아키텍처를 포함하고 있다.