주요 콘텐츠로 건너뛰기

Okta Portal SSO

SSO를 사용하여 Halo portal에 로그인할 수 있도록 ID 공급자로 Okta를 사용합니다.

필수 조건

Okta에서 앱 등록

앱 통합 생성

  1. Okta Admin Console에 로그인 → Applications -> Applications(으)로 이동합니다.
  2. Create App Integration을 클릭 → OIDC - OpenID Connect를 선택합니다.
  3. Single-Page Application을 클릭합니다.

image.png

앱 통합 구성

  1. Configure the following settings:
    • 앱 통합 이름: 예: Glasswall Halo Portal
    • Grant type: Choose below 3 options
      • Authorization Code
      • Refresh Token
      • Implicit (hybrid)
    • 로그인 리디렉션 URI: 예: https://<your-halo-domain>/authentication/login-callback
    • 로그아웃 리디렉션 URI: 예: https://<your-halo-domain>/authentication/logout-callback
    • 제어된 액세스: Allow everyone in your organization to access를 선택합니다. 또는 소수의 사용자로 액세스를 제한하려면 특정 그룹만 선택합니다.
    • Enable immediate access with Federation Broker Mode 선택을 해제합니다.

Screenshot: Halo Portal Client Screenshot: Halo Portal Client

애플리케이션 저장 및 client ID 기록

  1. 애플리케이션을 저장하고 Client ID를 기록합니다.

    export PORTAL_CLIENT_ID=""

Screenshot: Portal client id

API scope 부여

  1. Navigate to Okta API Scopes tab in the application and grant below scopes.
    • okta.myAccount.email.read
    • okta.myAccount.profile.read
    • okta.users.read
    • okta.users.read.self

Screenshots: Portal Okta API Scopes

issuer URI 및 audience 기록

  1. 사전 요구 단계에서 구성한 authorization server에서 Issuer Metadata URIVALID_AUDIENCE를 확인합니다:

    export OKTA_ISSUER_URI="https://<your-okta-domain>/oauth2/<authorization-server-id>"
    export OKTA_ORIGIN="https://<your-okta-domain>"
    export VALID_AUDIENCE="api://halo"

Portal용 access policy 추가

  1. authorization server의 Access Policies 탭으로 이동합니다(Security -> API -> authorization server 선택 -> Access Policies).
  2. Add a new access policy:
    • 이름: 예: Portal SSO Access
    • 설명: 예: Access policy for Halo Portal SSO users
    • 할당 대상: 위에서 생성한 Portal SPA client(이름 Glasswall Halo Portal으로 검색)
  3. Add a rule:
    • 이름: 예: Allow Portal Users
    • Grant type: Authorization Code
    • 사용자가 속한 그룹: Everyone(또는 Portal 액세스를 제한하려는 경우 특정 그룹(예: Halo-Admin)으로 제한)
    • 다른 설정은 기본값으로 두거나 필요에 따라 조정합니다.

Screenshot: Access policy for Portal SSO Screenshot: Add rule

Portal service 업데이트

export HALO_DOMAIN=<your-halo-domain>
helm upgrade --install cdrplatform-portal cdrplatform-portal -n cdrplatform --reuse-values \
--set configuration.AutoAdmin=false \
--set configuration.BackendScope="email openid profile" \
--set configuration.BackendUrl="https://${HALO_DOMAIN:?}" \
--set configuration.EnabledPages="SystemSettings\,PolicySettings\,IcapSettings\,IcapRequests\,IcapReporting" \
--set configuration.OIDC.ProviderOptions.Authority="${OKTA_ISSUER_URI:?}" \
--set configuration.OIDC.ProviderOptions.ClientId="${PORTAL_CLIENT_ID:?}" \
--set configuration.OIDC.ProviderOptions.PostLogoutRedirectUri="https://${HALO_DOMAIN:?}/authentication/logout-callback" \
--set configuration.OIDC.ProviderOptions.RedirectUri="https://${HALO_DOMAIN:?}/authentication/login-callback" \
--set appenvironment.HTTP_CSP_CONNECT_SRC="'self' ${OKTA_ORIGIN:?}" \
--set appenvironment.HTTP_CSP_FRAME_SRC="'self' ${OKTA_ORIGIN:?}" \
--set appenvironment.HTTP_CSP_FRAME_ANCESTORS="'self' ${OKTA_ORIGIN:?}" \
--set ingress.enabled=true \
--set ingress.tls.domain="${HALO_DOMAIN:?}" \
--set ingress.tls.enabled=true \
--atomic

Portal-Access 서비스 업데이트

helm upgrade --install cdrplatform-portal-access -n cdrplatform cdrplatform-portal-access --reuse-values \
--set configuration.Authentication__Schemes__Bearer__Authority="${OKTA_ISSUER_URI:?}" \
--set configuration.Authentication__Schemes__Bearer__ValidAudiences__0="${VALID_AUDIENCE:?}" \
--set configuration.Authentication__Schemes__Bearer__ValidIssuer="${OKTA_ISSUER_URI:?}" \
--set configuration.AuthenticationScheme="Bearer" \
--set configuration.CORSDOMAIN="'*'" \
--set ingress.enabled=true \
--set ingress.tls.domain="${HALO_DOMAIN:?}" \
--set ingress.tls.enabled=true \
--atomic

사용자에게 액세스 제공

Halo에는 UserAdmin의 2가지 역할이 있습니다. 역할은 Okta authorization server의 그룹 멤버십을 통해 구성됩니다(역할 정의 참조).

  • 사용자 역할을 부여하려면 사용자를 Halo_User 그룹에 추가합니다.
  • 관리자 역할을 부여하려면 사용자를 Halo_Admin 그룹에 추가합니다.