Programming-[Backend]/Keycloak

Keycloak <-> Okta SAML 연동, Attribute to Role

컴퓨터 탐험가 찰리 2024. 9. 19. 17:08
728x90
반응형

목표

Keycloak의 SAML 연동을 테스트하기 위해 Okta 라는 서비스를 사용하여 회원 정보 및 SSO 연동을 구현한다.

Okta의 유저로 Keycloak에 로그인하고, Okta의 사용자의 attribute를 Keycloak의 user의 Role로 매핑해본다.(Attribute to Role)

 

 

1. Okta 설정

 

okta에 가입. trial 버전으로 가입하면 무료로 사용해볼 수 있음

 

 

 

application을 생성한다. Create app Integration 버튼을 눌러서 SAML 2.0 방식으로 생성

Single Sign on URL, Audience URI를 일단 아무렇게나 입력한다.

 

 

다음 화면에서 internal app 으로 선택한다.

 

 

생성을 완료하고, 해당 애플리케이션 → Sign on 탭에 들어가보면 Metadata들을 확인할 수 있다.

 

이 메타데이터들을 다음 장의 Keycloak 설정 부분에 적어줄 것이다.

 

 

 

2. Keycloak 설정

특정 realm에 접속 → Identity Provider → SAML v2.0을 선택

SAML Settings에 Okta의 metadata 들을 기입한다.

 

 

다음과 같이 매핑하여 정보를 적는다.

  • [Keycloak] Identity provider entity ID : [Okta] Issuer
  • [Keycloak] Single Sign-On service URL : [Okta] Sign on URL
  • [Keycloak] Single logout service URL : [Okta] Sign out URL

 

 

Alias를 적어주고, 맨 아래에 Sync mode 부분은 Import로 처리해준다.

다음으로 다시 Keycloak의 Service Provider entity ID 값을 복사하여 Okta → Application → General → SAML Settings의 URL 값들에 넣어준다.(이 부분은 정확한 것인지 잘 모르겠음..)

 
 
 
 

3. User attribute 설정

Okta user attribute → Keycloak Role mapping을 위해 설정하는 방법을 알아본다.

 

 

3.1 Keycloak Mapper 설정

okta의 회원이 keycloak에 로그인했을 때, okta user attribute를 검사하고 특정 attribute의 value가 일치하면 user:create 권한을 주도록 매핑해본다.

Identity Providers → Mappers 탭 → Add mapper를 클릭

 
 

다음과 같이 설정해준다.

okta의 “userType” attribute의 값이 “user”인 경우, Role 부분에 있는 특정 client의 user:create 권한을 주겠다고 mapping을 선언하는 것이다(Advanced Attribute to Role).

 
 

3.2 Okta Attribute 설정

3.2.1 Add People

Directory → People → {SAML 2.0으로 생성한 Application} → Add person 으로 user를 생성한다.

 

 

3.2.2 add attribute to application

Directory → Profile Editor → {SAML 2.0으로 생성한 Application} → Attributes → Add Attribute로 들어가서 userType 속성을 추가한다. userType은 위 Keycloak에서 추가한 속성과 일치한다.

\

 

 

3.2.3 attribute statements 추가

Applications → {SAML 2.0으로 생성한 Application} → General 탭 → SAML Settings → Edit → attribute statements에 userType을 추가한다.

해당 application의 속성값이 외부 SAML과 연동 시 어떻게 export 되는지 설정하는 것이다. 여기서 중요한 부분은 appuser. 이라는 prefix를 붙여줘야한다는 것이다.

Ref.) https://help.okta.com/oie/en-us/content/topics/apps/define-attribute-statements.htm

3.2.4 assign people

다시 Directory → people → Assign Applications 로 들어가서 생성한 user를 해당 application에 assign 해준다.

3.2.5 set attribute value

keycloak에서 매핑이 될 수 있도록 해당 user의 attribute value 값을 “user”로 변경해준다.

Applications → {해당 application} → Assignments → 연필 모양 아이콘으로 attribute를 수정할 수 있다.

 
 

상기 언급한 userType 값을 user로 업데이트해준다.

 
 

4. User Role mapping 확인

 

 

keycloak에서 saml 로그인을 설정하였다면, 다음과 같이 saml 로그인 버튼을 확인할 수 있다.

 

 

요청 시 okta의 login 화면으로 redirect 된다. 그리고 okta에서 로그인을 하고 나면 keycloak에서 회원 정보를 입력받는 화면이 나온다.

제출을 클릭하여 회원가입을 완료하고, 가입이 완료된 user의 상세 페이지로 들어가서 role mapping을 확인해보면 SAML Mapping으로 설정해둔 role이 부여된 것을 확인할 수 있다.

728x90
반응형