본문 바로가기

IT for researcher/OSGi

(OSGi v4) User Admin Service Specification 1.1


Authorization 부분만 정리.

번들들은 액션을 요청한 사용자를 인증하고 Authorization 객체로써 이러한 인증을 표현하기 위하여 User Admin service를 사용할 수 있다. 사용자 대신 액션을 수행하는 번들들은 사용자가 권한이 부여되었는지 확인하기 위하여 Authorization 객체를 사용할 수 있다.

the Java code-based permission model 대신 코드를 수행하는 사용자를 기준으로 인증이 이루어진다. 이는 Java Authentication and Authorization Service와 유사하다.

엔티티들.

  • UserAdmin - 명명된 Role의 데이터베이스를 관리하는 인터페이스
  • Role - 모든 role들에 의해 공유되는 특성들이 드러내는 인터페이스 : 이름, 타입, 속성 집합
  • User - Role을 확장한 인터페이스로써 credential 정보를 가지고 엔티티를 표현할 때 사용된다.
  • Group - User를 확장한 인터페이스로써 Role 객체들(Group or User)의 집합을 포함하는데 사용된다.
  • Authorization - 번들들이 기본적인 인증 결정을 할 수 있는 정보들을 캡슐화하고 있는 인터페이스.
  • UserAdminEvent - role 변경 이벤트를 나타내는 클래스
  • UserAdminListener - 서비스로써 등록될 수 있는 UserAdminEvent 이벤트 타입을 위한 리스너 인터페이스
  • UserAdminPermission - User Admin 서비스에 의해 관리되는 롤을 설정하고 접근하기 위해 필요한 퍼미션이다.
  • Role.USER_ANYONE - 특별한 User 객체




Authorizaton

User Admin 서비스 권한 부여는 role-based 모델이다. 이 모델에서 번들에 의해 수행되는 모든 액션은  롤과 연관되어 있다. 그러한 롤은 User Admin 서비스 저장소에 Group 객체이다. 예를 들어 서블릿이 알람 시스템을 활성화하는데 사용된다면, AlaramSystemActivation 이라는 이름의 그룹이 되야만 한다.

오퍼레이터는 User객체와 다른 그룹들을 가지고 그룹을 생성하여 권한 부여를 관리 할 수 있다. 이렇게 함으로써 각각 모든 유저의 롤을 관리하는 것보다 쉽게 관리할 수 있다.

권한 부여 결정은 두가지 기본적으로 다른 방법으로 만들어 질 수 있다.

그룹 객체의 맴버중 하나라면 초기자가 액션을 수행하도록 허가 할 수 있다. 예를 들어, AlarmSystemActivation Group 객체는 Administrators와 Family Group 객체를 포함 할 수 있다.

Administrators = { Elmer, Pepe, Bugs }
Family = { Elmer, Pepe, Daffy }
AlarmSystemActivation = { Administrators, Family }

Elmer, Pepe, Daffy, or Bugs 모두 알람을 활성화 시킬수 있다.

이와 다르게, 그룹 객체의 맴버 모두를 의미한다면 액션을 수행하도록 하거할 수 있다.
동일한 AlramSystemActivation 그룹을 사용하는 경우, 유일하게 Elmer와 Pepe 만이 알람 시스템을 활성화 할수 있는 권한을 부여받게 된다.

User Admin 서비스는 두 방법의 조합을 지원한다. required, basic 을 정의한다.
Administrators = { Elmer, Pepe, Bugs }
Family = { Elmer, Pepe, Daffy }

AlarmSystemActivation
required = { Administrators }
basic = { Family }

required는 ALL, basic은 적어도 하나.
Administrators 그룹에 무조건 속해 있어야 된다.??

각각 다음과 같은 메소드를 이용하여 추가할 수 있다.
Group.addMember(Role);
Group.addRequiredMember(Role)


Authorization.hasRole(String) 메소드를 가지고 번들은 권한 체크를 수행한다.
수행하는 번들은 인수로써 액션의 이름을 넘겨야만 한다. Authorization 객체는 인증된 사용자가 Role 객체, 특히 Group 객체에 속하는지 여부를 체크한다.

public void activateAlarm(Authorization auth) {
if ( auth.hasRole( "AlarmSystemActivation" ) ) {
// activate the alarm
...
}
else throw new SecurityException(
"Not authorized to activate alarm" );
}


예제)
다음과 같은 액션 그룹이 있다.

AlarmSystemControl
InternetAccess
TemperatureControl
PhotoAlbumEdit
PhotoAlbumView
PortForwarding


오퍼레이터는 다음과 같은 그룹을 정의 한다.
Administrators
Buddies
Children
Adults
Residents

다음과 같이 사용자를 그룹에 사용자를 등록하였다.

Residents: Elmer, Fudd, Marvin, Pepe
Buddies: Daffy, Foghorn