서버 관리 가이드


Red Hat Single Sign-On 7.6

Red Hat Single Sign-On 7.6과 함께 사용하는 경우

Red Hat Customer Content Services

초록

이 안내서는 관리자가 Red Hat Single Sign-On 7.6을 구성하기 위한 정보로 구성됩니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Red Hat Single Sign-On 기능 및 개념

Red Hat Single Sign-On은 웹 앱 및 RESTful 웹 서비스에 대한 단일 서명 솔루션입니다. Red Hat Single Sign-On의 목표는 애플리케이션 개발자가 조직에 배포한 앱 및 서비스를 쉽게 보호할 수 있도록 보안을 간소화하는 것입니다. 일반적으로 개발자가 직접 작성해야 하는 보안 기능은 기본적으로 제공되며 조직의 개별 요구 사항에 맞게 쉽게 조정할 수 있습니다. Red Hat Single Sign-On은 로그인, 등록, 관리 및 계정 관리를 위한 사용자 정의 가능한 사용자 인터페이스를 제공합니다. Red Hat Single Sign-On을 통합 플랫폼으로 사용하여 기존 LDAP 및 Active Directory 서버에 연결할 수도 있습니다. 또한 Facebook 및 Google과 같은 타사 ID 공급자에 인증을 위임할 수도 있습니다.

1.1. 기능

Red Hat Single Sign-On은 다음과 같은 기능을 제공합니다.

  • 브라우저 애플리케이션에 대한 SSO(Single-Sign On) 및 Single-Sign Out.
  • OpenID Connect 지원
  • OAuth 2.0 지원
  • SAML 지원.
  • ID 브로커링 - 외부 OpenID Connect 또는 SAML ID 공급자를 사용한 인증.
  • 소셜 로그인 - Google, GitHub, Facebook, Thunderbird 및 기타 소셜 네트워크에서 로그인을 활성화합니다.
  • 사용자 페더레이션 - LDAP 및 Active Directory 서버의 사용자 동기화.
  • Kerberos 브리지 - Kerberos 서버에 로그인한 사용자를 자동으로 인증합니다.
  • 사용자, 역할, 역할 매핑, 클라이언트 및 구성을 중앙에서 관리할 수 있는 관리자 콘솔입니다.
  • 사용자가 계정을 중앙에서 관리할 수 있는 계정 관리 콘솔입니다.
  • Themes support - 애플리케이션 및 브랜딩과 통합되도록 모든 사용자 대면 페이지를 사용자 지정합니다.
  • 이중 인증 - Google Authenticator 또는 FreeOTP를 통한 TOTP/HOTP 지원.
  • 로그인 흐름 - 선택적 사용자 자동 등록, 암호 복구, 이메일 확인, 암호 업데이트 필요 등
  • 세션 관리 - 관리자와 사용자 자체는 사용자 세션을 보고 관리할 수 있습니다.
  • 토큰 매퍼 - 사용자 속성, 역할 등을 매핑합니다. 토큰 및 문으로 원하는 방법입니다.
  • 영역, 애플리케이션 및 사용자당 수신 거부 정책.
  • CORS 지원 - 클라이언트 어댑터는 CORS에 대한 기본 지원이 있습니다.
  • JavaScript 애플리케이션, JBoss EAP 등에 대한 클라이언트 어댑터.
  • OpenID Connect Relying Party 라이브러리 또는 SAML 2.0 Service Provider 라이브러리가 있는 모든 플랫폼/슬레이어를 지원합니다.

1.2. 기본 Red Hat Single Sign-On 작업

Red Hat Single Sign-On은 네트워크에서 관리하는 별도의 서버입니다. 애플리케이션은 이 서버를 가리키도록 구성되고 보호됩니다. Red Hat Single Sign-On은 OpenID Connect 또는 SAML 2.0 과 같은 오픈 프로토콜 표준을 사용하여 애플리케이션을 보호합니다. 브라우저 애플리케이션은 애플리케이션의 사용자 브라우저를 자격 증명을 입력하는 Red Hat Single Sign-On 인증 서버로 리디렉션합니다. 이 리디렉션은 사용자가 애플리케이션과 애플리케이션이 완전히 격리되어 있어 사용자의 자격 증명이 표시되지 않기 때문에 중요합니다. 대신 애플리케이션에는 암호화로 서명된 ID 토큰 또는 어설션이 부여됩니다. 이러한 토큰에는 사용자 이름, 주소, 이메일 및 기타 프로필 데이터와 같은 ID 정보가 포함될 수 있습니다. 또한 애플리케이션이 권한 결정을 내릴 수 있도록 권한 데이터를 보유할 수도 있습니다. 이러한 토큰은 REST 기반 서비스에서 보안 호출을 수행하는 데 사용할 수도 있습니다.

1.3. 핵심 개념 및 용어

Red Hat Single Sign-On을 사용하여 웹 애플리케이션 및 REST 서비스를 보호하려고 시도하기 전에 이러한 핵심 개념과 용어를 고려하십시오.

사용자
사용자는 시스템에 로그인할 수 있는 엔티티입니다. 이메일, 사용자 이름, 주소, 전화 번호, 유년월일과 같은 속성을 가질 수 있습니다. 그룹 멤버십을 할당하고 특정 역할을 할당할 수 있습니다.
인증
사용자를 식별하고 검증하는 프로세스입니다.
권한 부여
사용자에게 액세스 권한을 부여하는 프로세스입니다.
인증 정보
자격 증명은 Red Hat Single Sign-On에서 사용자의 ID를 확인하는 데 사용하는 데이터 조각입니다. 일부 예로는 암호, 일회성 암호, 디지털 인증서 또는 지문이 있습니다.
역할
역할은 사용자 유형 또는 카테고리를 식별합니다. 관리자,사용자,관리자직원은 조직에 존재할 수 있는 모든 일반적인 역할입니다. 애플리케이션은 사용자를 다루는 것이 아니라 특정 역할에 액세스 및 권한을 할당하는 경우가 너무 정교하고 관리하기 어렵습니다.
사용자 역할 매핑
사용자 역할 매핑은 역할과 사용자 간의 매핑을 정의합니다. 사용자는 0개 이상의 역할과 연결할 수 있습니다. 이 역할 매핑 정보는 애플리케이션이 관리하는 다양한 리소스에 대한 액세스 권한을 결정할 수 있도록 토큰 및 어설션으로 캡슐화될 수 있습니다.
복합 역할
복합 역할은 다른 역할과 연결할 수 있는 역할입니다. 예를 들어 슈퍼 유저 복합 역할은 sales-adminorder-entry-admin 역할과 연결할 수 있습니다. 사용자가 superuser 역할에 매핑되면 sales-adminorder-entry-admin 역할도 상속합니다.
groups
그룹은 사용자 그룹을 관리합니다. 그룹에 특성을 정의할 수 있습니다. 역할을 그룹에 매핑할 수도 있습니다. 그룹의 멤버가 되는 사용자는 해당 그룹에서 정의하는 속성 및 역할 매핑을 상속합니다.
영역
영역은 사용자, 자격 증명, 역할 및 그룹 세트를 관리합니다. 사용자는 영역에 속하고 로그인합니다. 영역은 서로 격리되며 제어하는 사용자만 관리하고 인증할 수 있습니다.
클라이언트
클라이언트는 Red Hat Single Sign-On을 요청하여 사용자를 인증할 수 있는 엔티티입니다. 대부분의 경우 클라이언트는 Red Hat Single Sign-On을 사용하여 자체적으로 보호하고 SSO(Single Sign-On)를 제공하는 애플리케이션 및 서비스입니다. 또한 클라이언트는 Red Hat Single Sign-On에서 보안된 네트워크에서 다른 서비스를 안전하게 호출할 수 있도록 ID 정보 또는 액세스 토큰을 요청하려는 엔티티일 수도 있습니다.
클라이언트 어댑터
클라이언트 어댑터는 Red Hat Single Sign-On으로 통신하고 보호할 수 있도록 애플리케이션 환경에 설치하는 플러그인입니다. Red Hat Single Sign-On에는 다운로드할 수 있는 다양한 플랫폼에 대한 여러 어댑터가 있습니다. 또한 사용하지 않는 환경에 사용할 수 있는 타사 어댑터도 있습니다.
동의
관리자로서 사용자가 인증 프로세스에 참여할 수 있기 전에 사용자가 클라이언트에 권한을 부여하도록 하려는 경우 동의해야 합니다. 사용자가 자격 증명을 제공하면 Red Hat Single Sign-On은 로그인을 요청하는 클라이언트와 사용자가 요청한 ID 정보를 식별하는 화면이 표시됩니다. 사용자는 요청을 허용할지 여부를 결정할 수 있습니다.
클라이언트 범위
클라이언트가 등록되면 해당 클라이언트에 대한 프로토콜 매퍼 및 역할 범위 매핑을 정의해야 합니다. 일부 공통 설정을 공유하여 새 클라이언트를 쉽게 만들 수 있도록 클라이언트 범위를 저장하는 것이 유용할 수 있습니다. 또한 범위 매개 변수의 값에 따라 조건부로 일부 클레임 또는 역할을 요청하는 데 유용합니다. Red Hat Single Sign-On은 이를 위해 클라이언트 범위에 대한 개념을 제공합니다.
클라이언트 역할
클라이언트는 고유한 역할을 정의할 수 있습니다. 기본적으로 클라이언트 전용 역할 네임스페이스입니다.
ID 토큰
사용자에 대한 ID 정보를 제공하는 토큰입니다. OpenID Connect 사양의 일부입니다.
액세스 토큰
호출 중인 서비스에 대한 액세스 권한을 부여하는 HTTP 요청의 일부로 제공될 수 있는 토큰입니다. OpenID Connect 및 OAuth 2.0 사양의 일부입니다.
어설션
사용자에 대한 정보입니다. 일반적으로 인증된 사용자에 대한 ID 메타데이터를 제공하는 SAML 인증 응답에 포함된 XML Blob과 관련이 있습니다.
서비스 계정
각 클라이언트에는 액세스 토큰을 얻을 수 있는 기본 제공 서비스 계정이 있습니다.
직접 권한 부여
클라이언트가 REST 호출을 통해 사용자를 대신하여 액세스 토큰을 얻는 방법입니다.
프로토콜 매퍼
각 클라이언트에 대해 OIDC 토큰 또는 SAML 어설션에 저장된 클레임 및 어설션을 조정할 수 있습니다. 프로토콜 매퍼를 생성하고 구성하여 클라이언트별로 이 작업을 수행합니다.
세션
사용자가 로그인하면 로그인 세션을 관리하기 위한 세션이 생성됩니다. 세션에는 사용자가 로그인했을 때 및 해당 세션 중에 SSO(Single-sign) 내에 참여한 애플리케이션과 같은 정보가 포함되어 있습니다. 관리자와 사용자 모두 세션 정보를 볼 수 있습니다.
사용자 페더레이션 공급자
Red Hat Single Sign-On은 사용자를 저장하고 관리할 수 있습니다. 종종 기업에는 사용자 및 자격 증명 정보를 저장하는 LDAP 또는 Active Directory 서비스가 이미 있습니다. Red Hat Single Sign-On을 가리키면 해당 외부 저장소의 자격 증명을 확인하고 ID 정보를 가져올 수 있습니다.
ID 공급자
IDP(ID 공급자)는 사용자를 인증할 수 있는 서비스입니다. Red Hat Single Sign-On은 IDP입니다.
ID 공급자 페더레이션
Red Hat Single Sign-On은 하나 이상의 IDP에 인증을 위임하도록 구성할 수 있습니다. Facebook 또는 Google+를 통한 소셜 로그인은 ID 공급자 페더레이션의 예입니다. Red Hat Single Sign-On을 연결하여 다른 OpenID Connect 또는 SAML 2.0 IDP에 인증을 위임할 수도 있습니다.
ID 공급자 매퍼
IDP 페더레이션을 수행할 때 들어오는 토큰과 어설션을 사용자 및 세션 속성에 매핑할 수 있습니다. 이를 통해 외부 IDP의 ID 정보를 인증을 요청하는 클라이언트로 전파할 수 있습니다.
필수 작업
필수 작업은 인증 프로세스 중에 사용자가 수행해야 하는 작업입니다. 사용자는 이러한 작업이 완료될 때까지 인증 프로세스를 완료할 수 없습니다. 예를 들어 관리자는 사용자가 매달 비밀번호를 재설정하도록 예약할 수 있습니다. 이러한 모든 사용자에 대해 필요한 업데이트 암호 를 설정합니다.
인증 흐름
인증 흐름은 시스템의 특정 측면과 상호 작용할 때 사용자가 수행해야 하는 작업 흐름입니다. 로그인 흐름은 필요한 인증 정보 유형을 정의할 수 있습니다. 등록 흐름은 사용자가 입력해야 하는 프로필 정보와 reCAPTCHA 같은 것을 봇을 필터링하는 데 사용해야 하는지 여부를 정의합니다. 인증 정보 재설정 흐름은 암호를 재설정하기 전에 사용자가 수행해야 하는 작업을 정의합니다.
이벤트
이벤트는 관리자가 보고 후크를 볼 수 있는 감사 스트림입니다.
themes
Red Hat Single Sign-On에서 제공하는 모든 화면은 제목에 의해 지원됩니다. 주제들은 필요에 따라 재정의할 수 있는 HTML 템플릿과 스타일시트를 정의합니다.

2장. 첫 번째 관리자 생성

Red Hat Single Sign-On을 설치한 후에는 Red Hat Single Sign-On의 모든 부분을 관리할 수 있는 슈퍼 관리자 역할을 할 수 있는 관리자 계정이 필요합니다. 이 계정을 사용하면 Red Hat Single Sign-On 관리 콘솔에 로그인하여 영역과 사용자를 생성하고 Red Hat Single Sign-On에서 보호하는 애플리케이션을 등록할 수 있습니다.

사전 요구 사항

2.1. 로컬 호스트에서 계정 생성

localhost 에서 서버에 액세스할 수 있는 경우 다음 단계를 수행합니다.

절차

  1. 웹 브라우저에서 http://localhost:8080/auth URL로 이동합니다.
  2. 기억할 수 있는 사용자 이름 및 암호를 입력합니다.

    시작 페이지

    Welcome Page

2.2. 원격으로 계정 생성

localhost 주소에서 서버에 액세스할 수 없거나 명령줄에서 Red Hat Single Sign-On을 시작하려면 …​/bin/add-user-keycloak 스크립트를 사용하십시오.

add-user-keycloak 스크립트

add user script

매개변수는 독립 실행형 작업 모드 또는 도메인 작업 모드를 사용하는 경우에 따라 약간 다릅니다. 독립 실행형 모드의 경우 스크립트를 사용하는 방법은 다음과 같습니다.

Linux/Unix

$ .../bin/add-user-keycloak.sh -r master -u <username> -p <password>

Windows

> ...\bin\add-user-keycloak.bat -r master -u <username> -p <password>

생성된 파일은 Red Hat Single Sign-On 실행 사용자와 다른 사용자가 소유합니다. Red Hat Single Sign-On 사용자가 서버를 다시 시작할 때 파일을 읽을 수 있도록 이 명령을 사용하여 권한을 설정합니다.

chgrp jboss /opt/rh/rh-sso7/root/usr/share/keycloak/standalone/configuration/keycloak-add-user.json

도메인 모드의 경우 -sc 스위치를 사용하여 스크립트를 서버 호스트 중 하나를 가리켜야 합니다.

Linux/Unix

$ .../bin/add-user-keycloak.sh --sc domain/servers/server-one/configuration -r master -u <username> -p <password>

Windows

> ...\bin\add-user-keycloak.bat --sc domain/servers/server-one/configuration -r master -u <username> -p <password>

3장. 영역 구성

관리 콘솔의 관리자 계정이 있으면 영역을 구성할 수 있습니다. 영역은 사용자, 애플리케이션, 역할 및 그룹을 포함하여 오브젝트를 관리하는 공간입니다. 사용자는 영역에 속하고 로그인합니다. 하나의 Red Hat Single Sign-On 배포는 데이터베이스에서 공간만큼 많은 영역을 정의, 저장 및 관리할 수 있습니다.

3.1. 관리자 콘솔 사용

Red Hat Single Sign-On 관리 콘솔에서 영역을 구성하고 대부분의 관리 작업을 수행합니다.

사전 요구 사항

절차

  1. 관리 콘솔의 URL을 이동합니다.

    예를 들어 localhost의 경우 다음 URL을 사용하십시오. http://localhost:8080/auth/admin/

    로그인 페이지

    Login page

  2. tkn Page에 생성한 사용자 이름과 암호를 입력하거나 bin 디렉터리의 add-user-keycloak 스크립트를 입력합니다. 이 작업에는 관리 콘솔이 표시됩니다.

    관리자 콘솔

    Admin Console

  3. 사용할 수 있는 메뉴 및 기타 옵션을 기록해 둡니다.

    • Master 레이블이 지정된 메뉴를 클릭하여 관리하려는 영역을 선택하거나 새 영역을 만듭니다.
    • 오른쪽 상단 목록을 클릭하여 계정을 보거나 로그아웃합니다.
    • 물음표 아이콘을 커서로 이동하여 해당 필드를 설명하는 툴팁 텍스트를 표시합니다. 위의 이미지는 툴팁이 작동하는 것을 보여줍니다.

3.2. 마스터 영역

관리 콘솔에는 다음 두 가지 유형의 영역이 있습니다.

  • 마스터 영역 - 이 영역은 Red Hat Single Sign-On을 처음 시작할 때 생성되었습니다. 처음 로그인할 때 만든 관리자 계정이 포함되어 있습니다. 마스터 영역을 사용하여 시스템에서 영역을 생성하고 관리합니다.
  • 기타 영역 - 이러한 영역은 마스터 영역의 관리자가 생성합니다. 이러한 영역에서 관리자는 조직 및 필요한 애플리케이션의 사용자를 관리합니다. 애플리케이션은 사용자가 소유합니다.

영역 및 애플리케이션

Realms and applications

영역은 서로 격리되며 제어하는 사용자만 관리하고 인증할 수 있습니다. 이 보안 모델에 따라 사고 변경을 방지하고 현재 작업을 성공적으로 완료하는 데 필요한 권한 및 권한에 대한 사용자 계정 액세스 권한을 허용하는 번거로움을 따릅니다.

추가 리소스

  • 마스터 영역을 비활성화하고 생성하는 새 영역 내에서 관리자 계정을 정의하려는 경우 DedicatedECDHE Admin Console 을 참조하십시오. 각 영역에는 로컬 계정으로 로그인할 수 있는 자체 전용 관리자 콘솔이 있습니다.

3.3. 영역 생성

사용자를 생성하고 애플리케이션을 사용할 수 있는 권한을 부여할 수 있는 관리 공간을 제공하는 영역을 생성합니다. 처음 로그인 시 일반적으로 다른 영역을 생성하는 최상위 영역인 마스터 영역에 있습니다.

사용자가 필요로 하는 영역을 결정할 때 사용자 및 애플리케이션에 필요한 격리 종류를 고려하십시오. 예를 들어 회사의 직원에 대한 영역과 고객을 위해 별도의 영역을 만들 수 있습니다. 직원은 직원 영역에 로그인하여 내부 회사 애플리케이션만 확인할 수 있습니다. 고객은 고객 영역에 로그인하여 고객용 애플리케이션과만 상호 작용할 수 있습니다.

절차

  1. 왼쪽 창의 맨 위를 가리킵니다.
  2. Add CloudEvent를 클릭합니다.

    영역 메뉴 추가

    Add realm menu

  3. 영역의 이름을 입력합니다.
  4. 생성을 클릭합니다.

    영역 생성

    Create realm

현재 영역은 방금 만든 영역으로 설정됩니다. 왼쪽 상단 모서리를 가리켜 다양한 영역 관리 간에 전환할 수 있습니다.

3.4. 영역에 대한 SSL 구성

각 영역에는 영역과 상호 작용하기 위한 SSL/HTTPS 요구 사항을 정의하는 관련 SSL 모드가 있습니다. 영역과 상호 작용하는 브라우저 및 애플리케이션은 SSL 모드에서 정의한 SSL/HTTPS 요구 사항을 준수하거나 서버와 상호 작용할 수 없습니다.

주의

Red Hat Single Sign-On은 처음 실행될 때 자체 서명된 인증서를 생성합니다. 자체 서명된 인증서는 안전하지 않으며 테스트 목적으로만 사용해야 합니다. Red Hat Single Sign-On 서버 자체 또는 Red Hat Single Sign-On 서버 앞의 역방향 프록시에 CA 서명 인증서를 설치하는 것이 좋습니다. 서버 설치 및 구성 가이드를 참조하십시오.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 로그인 탭을 클릭합니다.

    로그인 탭

    Login tab

  3. 다음 SSL 모드 중 하나에 SSL이 필요함을 설정합니다.

    • 외부 요청: 사용자는 localhost,127.0.0.1,10.x.x.x,192.168.x.x, 172.16.x.x 와 같은 개인 IP 주소를 유지하는 동안 SSL 없이 Red Hat Single Sign-On과 상호 작용할 수 있습니다. 비개인 IP 주소에서 SSL 없이 Red Hat Single Sign-On에 액세스하려고 하면 오류가 발생합니다.
    • none:: Red Hat Single Sign-On에는 SSL이 필요하지 않습니다. 이 옵션은 이 배포를 실험할 때에만 적용되며 이 배포를 지원할 계획이 없을 때에만 적용됩니다.
    • 모든 요청:: Red Hat Single Sign-On에는 모든 IP 주소에 대해 SSL이 필요합니다.

3.5. 서버 캐시 삭제

Red Hat Single Sign-On은 JVM의 제한과 구성한 한도 내에서 메모리에 가능한 모든 항목을 캐시합니다. 서버 REST API 또는 관리 콘솔 범위를 벗어나는 DBA와 같은 타사에서 Red Hat Single Sign-On 데이터베이스를 수정하는 경우 메모리 내 캐시의 일부가 오래될 수 있습니다. 외부 클라이언트 또는 ID 공급자의 공개 키와 같은 외부 공개 키의 영역 캐시, 사용자 캐시 또는 캐시를 지우면 Red Hat Single Sign-On이 특정 외부 엔티티의 서명을 확인하는 데 사용할 수 있습니다.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 캐시 탭을 클릭합니다.
  3. 제거할 캐시에 대해 Clear 를 클릭합니다.

    캐시 탭

    Cache tab

3.6. 영역에 대한 이메일 구성

Red Hat Single Sign-On은 사용자에게 이메일을 보내 이메일 주소를 확인하고 암호를 잊어버린 경우 또는 관리자가 서버 이벤트에 대한 알림을 받아야 하는 경우입니다. Red Hat Single Sign-On을 사용하여 이메일을 보내려면 Red Hat Single Sign-On에 SMTP 서버 설정을 제공합니다.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 이메일 탭을 클릭합니다.

    이메일 탭

    Email Tab

  3. 필드를 채우고 필요에 따라 스위치를 전환합니다.

    호스트
    host 는 이메일 전송에 사용되는 SMTP 서버 호스트 이름을 나타냅니다.
    포트
    port 는 SMTP 서버 포트를 나타냅니다.
    from
    from 은 전송된 이메일에 대해 From SMTP-Header에 사용되는 주소를 나타냅니다.
    표시 이름에서
    Display Name(표시 이름)에서 사용자에게 친숙한 이메일 주소 별칭을 구성할 수 있습니다(선택 사항). 일반 이메일 주소를 설정하지 않으면 이메일 클라이언트에 표시됩니다.
    응답 대상
    보낸 이메일에 대해 Reply -To SMTP-Header에 사용되는 주소를 나타냅니다(선택 사항). 일반 이메일 주소를 설정하지 않으면 이메일 주소가 사용됩니다.
    디스플레이 이름으로 응답
    Display Name(표시 이름)에 응답 하면 사용자에게 친숙한 이메일 주소 별칭(선택 사항)을 구성할 수 있습니다. 일반 Reply To 이메일 주소를 설정하지 않으면 표시됩니다.
    Envelope From
    From 은 전송된 이메일에 대해 Return-Path SMTP-Header에 사용되는 Bounce 주소를 나타냅니다.
    SSL 활성화 및 StartTSL 활성화
    특히 SMTP 서버가 외부 네트워크에 있는 경우 이러한 스위치 중 하나를 ON 으로 전환하여 사용자 이름 및 암호 복구에 대한 이메일 전송을 지원합니다. Port 를 465로 변경해야 할 가능성이 높습니다. SSL/TLS의 기본 포트입니다.
    인증 활성화
    SMTP 서버에 인증이 필요한 경우 이 스위치를 ON 으로 설정합니다. 메시지가 표시되면 UsernamePassword 를 입력합니다. Password 필드의 값은 외부 자격 증명 모음 의 값을 참조할 수 있습니다.

3.7. 주제 및 국제화 구성

지정된 영역에 대해 주제를 사용하여 Red Hat Single Sign-On에서 표시되는 언어를 포함하여 모든 UI의 모양을 변경할 수 있습니다.

절차

  1. 메뉴에서 CloudEvent Setting 을 클릭합니다.
  2. Themes 탭을 클릭합니다.

    주제 탭

    Themes tab

  3. 각 UI 범주에 대해 원하는 항목을 선택하고 저장 을 클릭합니다.

    login Theme
    사용자 이름 암호 항목, OTP 항목, 새 사용자 등록 및 로그인과 관련된 기타 유사한 화면입니다.
    계정 Theme
    각 사용자에게는 사용자 계정 관리 UI가 있습니다.
    관리자 콘솔 Theme
    Red Hat Single Sign-On 관리 콘솔의 손상.
    이메일 Theme
    Red Hat Single Sign-On이 이메일을 보내야 할 때마다 이 항목에 정의된 템플릿을 사용하여 이메일을 작성합니다.

추가 리소스

3.7.1. 국제화 활성화

모든 UI 화면은 Red Hat Single Sign-On에서 국제화됩니다. 기본 언어는 영어이지만 지원할 로케일과 기본 로케일을 선택할 수 있습니다.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. Theme 탭을 클릭합니다.
  3. 국제화ON 으로 설정합니다.

다음에 사용자가 로그인하면 해당 사용자는 로그인 화면, 계정 콘솔 및 관리 콘솔에 사용할 로그인 페이지에서 언어를 선택할 수 있습니다.

추가 리소스

  • 서버 개발자 가이드 에서는 추가 언어를 제공하는 방법을 설명합니다. 주제에서 제공하는 모든 국제화된 텍스트는 Localization 탭의 영역별 텍스트로 덮어쓸 수 있습니다.

3.7.2. 사용자 로케일 선택

로케일 선택기 공급자는 사용 가능한 정보에 가장 적합한 로케일을 제안합니다. 그러나 사용자가 누구인지는 종종 알 수 없습니다. 이러한 이유로 이전에 인증된 사용자의 로케일이 영구 쿠키로 기억됩니다.

로케일 선택 논리는 사용 가능한 다음 중 첫 번째를 사용합니다.

  • 사용자 선택 - 사용자가 드롭다운 로케일 선택기를 사용하여 로케일을 선택한 경우
  • 사용자 프로필 - 인증된 사용자가 있고 사용자가 선호하는 로케일이 설정된 경우
  • client selected - 클라이언트에서 전달(예: ui_locales 매개변수)
  • 쿠키 - 브라우저에서 선택한 마지막 로케일
  • 허용되는 언어 - Accept-Forwarded 헤더에서 로케일
  • 영역 기본값
  • 위의 항목이 없으면 다시 영어로 전환하십시오.

사용자가 인증되면 앞서 언급한 영구 쿠키의 로케일을 업데이트하는 작업이 트리거됩니다. 사용자가 로그인 페이지에서 로케일 선택기를 통해 로케일을 적극적으로 전환한 경우 이 시점에서 사용자 로케일도 업데이트됩니다.

로케일 선택을 위한 논리를 변경하려면 사용자 지정 LocaleSelectorProvider 를 만드는 옵션이 있습니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.

3.8. 로그인 옵션 제어

Red Hat Single Sign-On에는 여러 로그인 페이지 기능이 포함되어 있습니다.

3.8.1. 암호 잊어버림 활성화

Forgot Password 를 활성화하면 암호를 잊어 버렸거나 OTP 생성기가 손실되면 로그인 자격 증명을 재설정할 수 있습니다.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 로그인 탭을 클릭합니다.

    로그인 탭

    Login Tab

  3. Forgot PasswordON 으로 전환합니다.

    로그인 페이지에 비밀번호가 잊어버린 링크가 표시됩니다.

    비밀번호를 잊어버렸습니다.

    Forgot Password Link

  4. 이 링크를 클릭하여 사용자 이름 또는 이메일 주소를 입력하고 자격 증명을 재설정할 수 있는 링크가 포함된 이메일을 받습니다.

    비밀번호를 잊어버렸습니다.

    Forgot Password Page

이메일로 전송된 텍스트는 구성할 수 있습니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.

이메일 링크를 클릭하면 Red Hat Single Sign-On에서 암호를 업데이트할 것을 요청하고 OTP 생성기를 설정한 경우 Red Hat Single Sign-On은 OTP 생성기를 재구성하도록 요청합니다. 조직의 보안 요구 사항에 따라 사용자가 이메일을 통해 OTP 생성기를 재설정하는 것을 원하지 않을 수 있습니다.

이 동작을 변경하려면 다음 단계를 수행합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 흐름 탭을 클릭합니다.
  3. Reset Credentials flow를 선택합니다.

    인증 정보 흐름 재설정

    Reset Credentials Flow

    OTP를 재설정하지 않으려면 Reset OTP 요구 사항을 Disabled 로 설정합니다.

  4. 필요한 작업 탭을 클릭합니다. Update Password 가 활성화되어 있는지 확인합니다.

3.8.2. 알림 활성화

브라우저를 닫는 로그인한 사용자는 세션을 제거하며 해당 사용자는 다시 로그인해야 합니다. 로그인시 Remember Me 확인란을 클릭하면 해당 사용자가 사용자의 로그인 세션을 열린 상태로 유지하도록 Red Hat Single Sign-On을 설정할 수 있습니다. 이 작업은 로그인 쿠키를 세션 전용 쿠키에서 지속성 쿠키로 설정합니다.

절차

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 로그인 탭을 클릭합니다.
  3. Remember MeON 으로 전환합니다.

    로그인 탭

    login tab

이 설정을 저장하면 영역의 로그인 페이지에 확인란이 표시됩니다.

감사합니다.

remember me

3.8.3. ACR to Level of Authentication (LoA) Mapping

영역의 로그인 설정에서 LoA(Level of Authentication)에 매핑되는 ACR(Authentication Context Class Reference ) 값을 정의할 수 있습니다. ACR은 임의의 값일 수 있는 반면 LOA는 숫자여야 합니다. acr 클레임은 OIDC 요청에 전송된 claim 또는 acr_values 매개변수에서 요청할 수 있으며 액세스 토큰 및 ID 토큰에도 포함됩니다. 매핑된 수는 인증 흐름 조건에 사용됩니다.

특정 클라이언트가 영역과 다른 값을 사용해야 하는 경우 클라이언트 수준에서 매핑을 지정할 수도 있습니다. 그러나 가장 좋은 방법은 영역 매핑을 유지하는 것입니다.

ACR to LoA mapping

자세한 내용은 단계별 인증offical OIDC 사양을 참조하십시오.

3.8.3.1. 이메일 워크플로 업데이트 (UpdateEmail)

이 워크플로를 통해 사용자는 UPDATE_EMAIL 작업을 사용하여 자체 이메일 주소를 변경해야 합니다.

이 작업은 단일 이메일 입력 양식과 연결되어 있습니다. 영역에 이메일 확인이 비활성화된 경우 이 작업을 통해 확인없이 이메일을 업데이트할 수 있습니다. 영역에 이메일 확인이 활성화된 경우 해당 작업은 계정 이메일을 변경하지 않고 이메일 업데이트 작업 토큰을 새 이메일 주소로 보냅니다. 작업 토큰 트리거만 이메일 업데이트를 완료합니다.

애플리케이션은 UPDATE_EMAIL을 AIA(Application Initiated Action)로 활용하여 사용자를 이메일 업데이트 양식으로 보낼 수 있습니다.

참고

UpdateEmail은 기술 프리뷰 이며 완전히 지원되지 않습니다. 이 기능은 기본적으로 비활성화되어 있습니다.

-Dkeycloak.profile=preview 또는 -Dkeycloak.profile.feature.update_email=enabled 로 서버를 시작하려면 다음을 수행하십시오. 자세한 내용은 프로필을 참조하십시오.

참고

이 기능을 활성화하고 이전 버전에서 마이그레이션하는 경우 해당 영역에서 Update Email required 작업을 활성화하십시오. 그렇지 않으면 사용자가 이메일 주소를 업데이트할 수 없습니다.

3.9. 영역 키 구성

Red Hat Single Sign-On에서 사용하는 인증 프로토콜에는 암호화 서명 및 암호화가 필요합니다. Red Hat Single Sign-On에서는 private 키와 공개 키 쌍을 사용하여 이를 수행합니다.

Red Hat Single Sign-On에는 한 번에 하나의 활성 키 쌍이 있지만 여러 개의 수동 키도 있을 수 있습니다. 활성 키 쌍은 새 서명을 만드는 데 사용되며 수동 쌍은 이전 서명을 확인하는 데 사용할 수 있습니다. 이렇게 하면 사용자가 다운타임이나 중단 없이 키를 정기적으로 순환할 수 있습니다.

영역이 생성되면 키 쌍과 자체 서명된 인증서가 자동으로 생성됩니다.

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 를 클릭합니다.
  4. Passive 를 클릭하여 수동 키를 봅니다.
  5. Disabled 를 클릭하여 비활성화된 키를 확인합니다.

키 쌍의 상태는 Active 이지만 영역의 현재 활성 키 쌍으로는 선택되지 않습니다. 서명에 사용되는 선택한 활성 쌍은 활성 키 쌍을 제공할 수 있는 우선 순위별로 정렬된 첫 번째 키 공급자를 기반으로 선택됩니다.

3.9.1. 키 교체

정기적으로 키를 교체하는 것이 좋습니다. 먼저 기존 활성 키보다 우선 순위가 높은 새 키를 만듭니다. 대신 동일한 우선 순위로 새 키를 생성하고 이전 키를 수동 설정할 수 있습니다.

새 키를 사용할 수 있게 되면 모든 새 토큰과 쿠키가 새 키로 서명됩니다. 사용자가 애플리케이션에 인증하면 SSO 쿠키가 새 서명으로 업데이트됩니다. OpenID Connect 토큰이 새로 고쳐지면 새 토큰이 새 키로 서명됩니다. 결국 모든 쿠키와 토큰은 새 키를 사용하며 잠시 후 이전 키를 제거할 수 있습니다.

이전 키를 삭제하는 빈도는 보안의 장단점이며 모든 쿠키와 토큰이 업데이트되었는지 확인합니다. 새 키를 생성한 후 3~6개월마다 새 키를 생성하고 이전 키를 2개월 후에 삭제하는 것이 좋습니다. 사용자가 추가되는 새 키와 이전 키 사이의 기간에 비활성 상태인 경우 해당 사용자는 다시 인증해야 합니다.

회전 키는 오프라인 토큰에도 적용됩니다. 애플리케이션이 업데이트되도록 하려면 이전 키를 제거하기 전에 토큰을 새로 고쳐야 합니다.

3.9.2. 생성된 키 쌍 추가

이 절차를 사용하여 자체 서명된 인증서를 포함하여 키 쌍을 생성합니다.

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 탭을 클릭합니다.
  4. 공급자 탭을 클릭합니다.
  5. Add keystore 를 클릭하고 rsa-generated 를 선택합니다.
  6. Priority 필드에 숫자를 입력합니다. 이 숫자는 새 키 쌍이 활성 키 쌍인지 확인합니다. 가장 높은 숫자는 키 쌍을 활성화합니다.
  7. keysize 값을 선택합니다.
  8. 저장을 클릭합니다.

공급자의 우선 순위를 변경하면 키가 다시 생성되지 않지만 키 크기를 변경하려면 공급자를 편집할 수 있으며 새 키가 생성됩니다.

3.9.3. 인증서를 추출하여 키 교체

RSA 생성된 키 쌍에서 인증서를 추출하고 새 키 저장소에서 해당 인증서를 사용하여 키를 회전할 수 있습니다.

사전 요구 사항

  • 생성된 키 쌍

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. VMDK 설정을 클릭합니다.
  3. 탭을 클릭합니다.

    활성 키 목록이 나타납니다.

  4. RSA 키가 있는 행에서 공개 키 아래 의 인증서를 클릭합니다.

    인증서가 텍스트 형식으로 표시됩니다.

  5. 인증서를 파일에 저장하고 해당 행에 묶습니다.

    ----Begin Certificate----
    <Output>
    ----End Certificate----
  6. keytool 명령을 사용하여 키 파일을 PEM 형식으로 변환합니다.
  7. 키 저장소에서 현재 RSA 공개 키 인증서를 제거합니다.

    keytool -delete -keystore <keystore>.jks -storepass <password> -alias <key>
  8. 새 인증서를 키 저장소로 가져옵니다.

    keytool -importcert -file domain.crt -keystore <keystore>.jks -storepass <password>  -alias <key>
  9. 애플리케이션 배포를 취소하고 다시 빌드합니다.

    wildfly:undeploy
    mvn clean install wildfly:deploy

3.9.4. 기존 키 쌍 및 인증서 추가

다른 위치에서 가져온 키 쌍 및 인증서를 추가하려면 Provider 를 선택하고 드롭다운에서 rsa 를 선택합니다. 새 키 쌍이 활성 키 쌍이 되도록 우선 순위를 변경할 수 있습니다.

사전 요구 사항

  • 개인 키 파일입니다. 파일은 PEM 형식이어야 합니다.

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 탭을 클릭합니다.
  4. 공급자 탭을 클릭합니다.
  5. 키 저장소 추가 를 클릭하고 rsa 를 선택합니다.
  6. Priority 필드에 숫자를 입력합니다. 이 숫자는 새 키 쌍이 활성 키 쌍이 될지 여부를 결정합니다.
  7. Select file beside Private RSA Key 를 클릭하여 개인 키 파일을 업로드합니다.
  8. 개인 키의 서명된 인증서가 있는 경우 X509 인증서 옆에 있는 파일 선택을 클릭하여 인증서 파일을 업로드합니다. Red Hat Single Sign-On은 인증서를 업로드하지 않는 경우 자체 서명된 인증서를 생성합니다.
  9. 저장을 클릭합니다.

3.9.5. Java 키 저장소에서 키 로드

호스트의 Java 키 저장소 파일에 저장된 키 쌍과 인증서를 추가하려면 드롭다운에서 java-keystore 를 선택합니다. 새 키 쌍이 활성 키 쌍이 되도록 우선 순위를 변경할 수 있습니다.

연결된 인증서 체인을 로드하려면 키 쌍을 로드하는 데 사용되는 것과 동일한 키 별칭이 있는 Java 키 저장소 파일로 가져와야 합니다.

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 탭을 클릭합니다.
  4. 공급자 탭을 클릭합니다.
  5. 키 저장소 추가 를 클릭하고 java-keystore 를 선택합니다.
  6. Priority 필드에 숫자를 입력합니다. 이 숫자는 새 키 쌍이 활성 키 쌍이 될지 여부를 결정합니다.
  7. 키 저장소 값을 입력합니다.
  8. 키 저장소 암호 의 값을 입력합니다.
  9. Key Alias 의 값을 입력합니다.
  10. 키 암호 의 값을 입력합니다.
  11. 저장을 클릭합니다.

3.9.6. 키를 수동 설정

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 탭을 클릭합니다.
  4. 활성 탭을 클릭합니다.
  5. 패시브를 만들 키의 공급자를 클릭합니다.
  6. Active to OFF 로 전환합니다.
  7. 저장을 클릭합니다.

3.9.7. 키 비활성화

절차

  1. 관리 콘솔에서 영역을 선택합니다.
  2. CloudEvent 설정을 클릭합니다.
  3. 탭을 클릭합니다.
  4. 활성 탭을 클릭합니다.
  5. 패시브를 만들 키의 공급자를 클릭합니다.
  6. EnabledOFF 로 전환합니다.
  7. 저장을 클릭합니다.

3.9.8. 손상된 키

Red Hat Single Sign-On에는 서명 키가 로컬에 저장되고 클라이언트 애플리케이션, 사용자 또는 기타 엔티티와 공유되지 않습니다. 그러나 영역 서명 키가 손상되었다고 생각되면 먼저 위에 설명된 대로 새 키 쌍을 생성한 다음 손상된 키 쌍을 즉시 제거해야 합니다.

또는 공급자 테이블에서 공급자를 삭제할 수 있습니다.

절차

  1. 메뉴에서 Clients 를 클릭합니다.
  2. security-admin-console 을 클릭합니다.
  3. 취소 탭을 클릭합니다.
  4. Set to now 를 클릭합니다.
  5. 푸시 를 클릭합니다.

not-before 정책을 내보내면 클라이언트 애플리케이션이 손상된 키로 서명된 기존 토큰을 허용하지 않습니다. 클라이언트 애플리케이션은 Red Hat Single Sign-On에서 새 키 쌍을 다운로드해야 하므로 손상된 키로 서명된 토큰이 유효하지 않습니다.

참고

REST 및 기밀 클라이언트는 Admin URL 을 설정해야 Red Hat Single Sign-On에서 클라이언트에게 푸시되지 않음 정책 요청을 보낼 수 있습니다.

4장. 외부 스토리지 사용

조직에는 정보, 암호 및 기타 자격 증명을 포함하는 데이터베이스가 있을 수 있습니다. 일반적으로 기존 데이터 스토리지를 Red Hat Single Sign-On 배포로 마이그레이션할 수 없으므로 Red Hat Single Sign-On은 기존 외부 사용자 데이터베이스를 연결할 수 있습니다. Red Hat Single Sign-On은 LDAP 및 Active Directory를 지원하지만 Red Hat Single Sign-On User Storage SPI를 사용하여 모든 사용자 지정 사용자 데이터베이스에 대한 코드 확장을 수행할 수도 있습니다.

사용자가 로그인을 시도하면 Red Hat Single Sign-On에서 해당 사용자를 찾기 위해 해당 사용자의 스토리지를 검사합니다. Red Hat Single Sign-On에서 사용자를 찾을 수 없는 경우 Red Hat Single Sign-On은 일치하는 항목을 찾을 때까지 해당 영역에 대해 각 사용자 스토리지 공급자를 반복합니다. 외부 데이터 스토리지의 데이터는 Red Hat Single Sign-On 런타임에서 사용하는 표준 사용자 모델에 매핑됩니다. 그런 다음 이 사용자 모델은 OIDC 토큰 클레임 및 SAML 어설션 속성에 매핑됩니다.

외부 사용자 데이터베이스에는 Red Hat Single Sign-On의 모든 기능을 지원하는 데 필요한 데이터가 거의 없으므로 사용자 스토리지 공급자가 Red Hat Single Sign-On 사용자 데이터 스토리지에 로컬로 항목을 저장할 수 있습니다. 공급자는 사용자를 로컬로 가져와서 외부 데이터 스토리지와 주기적으로 동기화할 수 있습니다. 이 접근 방식은 공급자의 기능과 공급자의 구성에 따라 다릅니다. 예를 들어 외부 사용자 데이터 스토리지에서 OTP를 지원하지 않을 수 있습니다. OTP는 공급자에 따라 Red Hat Single Sign-On으로 처리하고 저장할 수 있습니다.

4.1. 공급자 추가

스토리지 공급자를 추가하려면 다음 절차를 수행합니다.

절차

  1. 메뉴에서 User Federation 을 클릭합니다.

    사용자 페더레이션

    User federation

  2. 공급자 추가 목록에서 공급자 유형을 선택합니다. Red Hat Single Sign-On은 해당 공급자의 구성 페이지로 이동합니다.

4.2. 공급자 장애 처리

User Storage Provider가 실패하면 Admin Console에서 사용자를 로그인하여 볼 수 없습니다. Red Hat Single Sign-On은 스토리지 공급자를 사용하여 사용자를 조회할 때 오류를 감지하지 않으므로 호출이 취소됩니다. 사용자 조회 중에 실패하는 우선 순위가 높은 스토리지 공급자가 있는 경우 로그인 또는 사용자 쿼리가 예외와 함께 실패하고 다음에 구성된 공급자로 실패하지 않습니다.

Red Hat Single Sign-On은 로컬 Red Hat Single Sign-On 사용자 데이터베이스를 검색하여 LDAP 또는 사용자 지정 사용자 스토리지 공급자보다 먼저 사용자를 해결합니다. LDAP 및 백엔드에 연결하는 데 문제가 있는 경우 로컬 Red Hat Single Sign-On 사용자 데이터베이스에 저장된 관리자 계정을 생성하는 것이 좋습니다.

각 LDAP 및 사용자 지정 사용자 스토리지 공급자에는 관리 콘솔 페이지에 사용 가능한 토글이 있습니다. 사용자 스토리지 공급자 비활성화는 쿼리 수행 시 공급자를 건너뛰므로 우선 순위가 낮은 다른 공급자의 사용자 계정을 보고 로그인할 수 있습니다. 공급자가 가져오기 전략을 사용하고 비활성화된 경우에도 가져온 사용자는 읽기 전용 모드로 조회할 수 있습니다.

스토리지 공급자 조회에 실패하면 사용자 데이터베이스에 중복된 사용자 이름 또는 중복 이메일이 있는 경우가 많기 때문에 Red Hat Single Sign-On은 실패하지 않습니다. 중복된 사용자 이름과 이메일은 관리자가 다른 데이터 저장소에서 로드할 때 하나의 외부 데이터 저장소에서 로드되기 때문에 문제가 발생할 수 있습니다.

4.3. LDAP(Lightweight Directory Access Protocol) 및 Active Directory

Red Hat Single Sign-On에는 LDAP/AD 공급자가 포함되어 있습니다. 하나의 Red Hat Single Sign-On 영역에 여러 개의 LDAP 서버를 통합하고 LDAP 사용자 속성을 Red Hat Single Sign-On 공통 사용자 모델에 매핑할 수 있습니다.

기본적으로 Red Hat Single Sign-On은 사용자 계정의 사용자 이름, 이메일, 이름, 성을 매핑하지만 추가 매핑을 구성할 수도 있습니다. Red Hat Single Sign-On의 LDAP/AD 공급자는 LDAP/AD 프로토콜 및 스토리지, 편집 및 동기화 모드를 사용하여 암호 검증을 지원합니다.

4.3.1. 페더레이션 LDAP 스토리지 구성

절차

  1. 메뉴에서 User Federation 을 클릭합니다.

    사용자 페더레이션

    User federation

  2. Add Provider (프로바이더 추가) 목록에서 ldap 를 선택합니다. Red Hat Single Sign-On은 LDAP 구성 페이지로 이동합니다.

4.3.2. 스토리지 모드

Red Hat Single Sign-On은 LDAP의 사용자를 로컬 Red Hat Single Sign-On 사용자 데이터베이스로 가져옵니다. 이 사용자 데이터베이스 복사본은 온 디맨드 또는 주기적 백그라운드 작업을 통해 동기화됩니다. 암호를 동기화하기 위한 예외가 있습니다. Red Hat Single Sign-On은 암호를 가져오지 않습니다. 암호 유효성 검사는 항상 LDAP 서버에서 수행됩니다.

동기화의 장점은 필요한 추가 사용자별 데이터가 로컬에 저장되므로 모든 Red Hat Single Sign-On 기능이 효율적으로 작동할 수 있다는 점입니다. 단점은 Red Hat Single Sign-On이 특정 사용자를 처음 쿼리할 때마다 Red Hat Single Sign-On이 해당 데이터베이스 삽입을 수행한다는 것입니다.

LDAP 서버와 가져오기를 동기화할 수 있습니다. LDAP 매퍼가 데이터베이스 대신 LDAP에서 특정 속성을 항상 읽으면 가져오기 동기화가 필요하지 않습니다.

사용자를 Red Hat Single Sign-On 사용자 데이터베이스로 가져오지 않고 Red Hat Single Sign-On에서 LDAP를 사용할 수 있습니다. LDAP 서버는 Red Hat Single Sign-On 런타임에서 사용하는 공통 사용자 모델을 백업합니다. LDAP에서 Red Hat Single Sign-On 기능에 필요한 데이터를 지원하지 않는 경우 해당 기능이 작동하지 않습니다. 이 접근 방식의 장점은 LDAP 사용자의 사본을 가져오고 Red Hat Single Sign-On 사용자 데이터베이스에 동기화하는 리소스 사용량이 없다는 것입니다.

LDAP 구성 페이지의 사용자 가져오기 스위치는 이 스토리지 모드를 제어합니다. 사용자를 가져오려면 이 스위치를 ON 으로 전환합니다.

참고

사용자 가져오기 를 비활성화하는 경우 사용자 프로필 속성을 Red Hat Single Sign-On 데이터베이스에 저장할 수 없습니다. LDAP에 매핑된 사용자 프로필 메타데이터를 제외하고 메타데이터를 저장할 수 없습니다. 이 메타데이터에는 역할 매핑, 그룹 매핑, LDAP 매퍼 구성에 따른 기타 메타데이터가 포함될 수 있습니다.

LDAP가 매핑되지 않은 사용자 데이터를 변경하려고 하면 사용자 업데이트가 불가능합니다. 예를 들어 사용자의 활성화된 플래그가 LDAP 속성에 매핑되지 않는 한 LDAP 매핑된 사용자를 비활성화할 수 없습니다.

4.3.3. 편집 모드

사용자와 관리자는 Admin Console을 통해 사용자 메타데이터, 계정 콘솔을 통한 사용자 및 관리자를 수정할 수 있습니다. LDAP 구성 페이지의 Edit Mode 구성은 사용자의 LDAP 업데이트 권한을 정의합니다.

READONLY
사용자 이름, 이메일, 이름, 성 및 기타 매핑된 속성을 변경할 수 없습니다. Red Hat Single Sign-On에는 사용자가 이러한 필드를 업데이트하려고 할 때마다 오류가 표시됩니다. 암호 업데이트는 지원되지 않습니다.
WRITABLE
사용자 이름, 이메일, 이름, 성, 기타 매핑된 속성 및 암호를 변경하고 LDAP 저장소와 자동으로 동기화할 수 있습니다.
UNSYNCED
Red Hat Single Sign-On은 사용자 이름, 이메일, 이름, 이름, 암호에 대한 변경 사항을 Red Hat Single Sign-On 로컬 스토리지에 저장하므로 관리자는 이 데이터를 다시 LDAP에 동기화해야 합니다. 이 모드에서 Red Hat Single Sign-On 배포는 읽기 전용 LDAP 서버에서 사용자 메타데이터를 업데이트할 수 있습니다. 이 옵션은 LDAP에서 로컬 Red Hat Single Sign-On 사용자 데이터베이스로 사용자를 가져올 때에도 적용됩니다.
참고

Red Hat Single Sign-On이 LDAP 공급자를 생성하는 경우 Red Hat Single Sign-On은 초기 LDAP 매퍼 세트도 생성합니다. Red Hat Single Sign-On은 벤더,편집 모드가져오기 스위치의 조합을 기반으로 이러한 매퍼를 구성합니다. 예를 들어 편집 모드가 UNSYNCED인 경우 Red Hat Single Sign-On은 LDAP 서버가 아닌 데이터베이스에서 특정 사용자 속성을 읽도록 매퍼를 구성합니다. 그러나 나중에 편집 모드를 변경하는 경우 구성이 UNSYNCED 모드에서 변경되었는지 여부를 탐지할 수 없기 때문에 매퍼의 구성은 변경되지 않습니다. LDAP 공급자를 생성할 때 편집 모드를 결정합니다. 이 노트는 Import Users 스위치에도 적용됩니다.

4.3.4. 기타 설정 옵션

콘솔 표시 이름
관리 콘솔에 표시할 공급자의 이름입니다.
우선 순위
사용자를 검색하거나 사용자를 추가할 때 공급자의 우선 순위입니다.
동기화 등록
Red Hat Single Sign-On에서 생성한 새 사용자를 LDAP에 추가하려는 경우 이 스위치를 ON 으로 전환합니다.
Kerberos 인증 허용
LDAP에서 프로비저닝된 사용자 데이터를 사용하여 영역에서 Kerberos/SPEGO 인증을 활성화합니다. 자세한 내용은 Kerberos 섹션 을 참조하십시오.
기타 옵션
관리 콘솔의 툴팁 위에 마우스 포인터를 올려 놓으면 이러한 옵션에 대한 자세한 내용을 확인할 수 있습니다.

4.3.5. LDAP에서 SSL을 통해 연결

LDAP 저장소에 대한 보안 연결 URL(예:ldaps://myhost.com:636)을 구성하는 경우 Red Hat Single Sign-On은 SSL을 사용하여 LDAP 서버와 통신합니다. Red Hat Single Sign-On이 LDAP에 대한 SSL 연결을 신뢰할 수 있도록 Red Hat Single Sign-On 서버 측에서 신뢰 저장소를 구성합니다.

신뢰할 수 있는 SPI를 사용하여 Red Hat Single Sign-On의 글로벌 신뢰 저장소를 구성합니다. 글로벌 신뢰 저장소를 구성하는 방법에 대한 자세한 내용은 서버 설치 및 구성 가이드를 참조하십시오. 신뢰 저장소 SPI를 구성하지 않으면 신뢰 저장소는 Java에서 제공하는 기본 메커니즘으로 대체되며, 이 메커니즘은 javax.net.ssl.trustStore 시스템 속성 또는 시스템 속성이 설정되지 않은 경우 JDK의 cacerts 파일일 수 있습니다.

LDAP 페더레이션 공급자 구성의 Use Truststore SPI 구성 속성은 신뢰 저장소(SPI)를 제어합니다. 기본적으로 Red Hat Single Sign-On은 대부분의 배포에 적합한 ldaps의 속성을 로 설정합니다. Red Hat Single Sign-On은 LDAP에 대한 연결 URL이 ldaps 로만 시작하는 경우 Truststore SPI를 사용합니다.

4.3.6. LDAP 사용자를 Red Hat Single Sign-On에 동기화

사용자 가져오기 옵션을 설정하면 LDAP 공급자가 Red Hat Single Sign-On 로컬 데이터베이스로 LDAP 사용자 가져오기를 처리합니다. 사용자가 처음 로그인할 때 LDAP 공급자는 LDAP 사용자를 Red Hat Single Sign-On 데이터베이스로 가져와서 LDAP 암호를 검증합니다. 사용자가 처음 로그인하면 Red Hat Single Sign-On이 사용자를 가져오는 유일한 시간입니다. Admin Console에서 Users 메뉴를 클릭하고 모든 사용자 보기 버튼을 클릭하면 Red Hat Single Sign-On으로 한 번 이상 인증된 LDAP 사용자만 표시됩니다. Red Hat Single Sign-On은 사용자를 이러한 방식으로 가져오기 때문에 이 작업으로 전체 LDAP 사용자 데이터베이스를 가져오지 않습니다.

모든 LDAP 사용자를 Red Hat Single Sign-On 데이터베이스에 동기화하려면 LDAP 공급자 구성 페이지에서 동기화 설정을 구성하고 활성화합니다.

두 가지 유형의 동기화가 있습니다.

정기적인 완전 동기화
이 유형은 모든 LDAP 사용자를 Red Hat Single Sign-On 데이터베이스와 동기화합니다. 이미 Red Hat Single Sign-On에 있지만 LDAP에서는 다른 LDAP 사용자가 Red Hat Single Sign-On 데이터베이스에서 직접 업데이트합니다.
정기적인 변경된 사용자 동기화
동기화할 때 Red Hat Single Sign-On은 마지막 동기화 후에 생성 또는 업데이트된 사용자를 생성하거나 업데이트합니다.

동기화하는 가장 좋은 방법은 LDAP 공급자를 처음 생성할 때 모든 사용자 동기화 를 클릭한 다음 변경된 사용자의 주기적 동기화를 설정하는 것입니다.

4.3.7. LDAP 매퍼

LDAP 매퍼는 LDAP 공급자가 트리거하는 리스너 입니다. LDAP 통합을 위한 또 다른 확장 지점을 제공합니다. LDAP 매퍼는 다음과 같은 경우 트리거됩니다.

  • 사용자는 LDAP를 사용하여 로그인합니다.
  • 사용자가 처음에 등록합니다.
  • 관리 콘솔은 사용자를 쿼리합니다.

LDAP 페더레이션 공급자를 생성하면 Red Hat Single Sign-On에서 이 공급자 의 매퍼 세트를 자동으로 제공합니다. 이 세트는 사용자가 매퍼를 개발하거나 기존 항목을 업데이트/삭제할 수도 있습니다.

사용자 속성 맵퍼
이 매퍼는 Red Hat Single Sign-On 사용자의 속성에 매핑되는 LDAP 속성을 지정합니다. 예를 들어 Red Hat Single Sign-On 데이터베이스의 email 속성으로 mail LDAP 속성을 구성할 수 있습니다. 이 매퍼 구현의 경우 일대일 매핑이 항상 존재합니다.
fullname Mapper
이 매퍼는 사용자의 전체 이름을 지정합니다. Red Hat Single Sign-On은 LDAP 속성(일반적으로 cn)에 이름을 저장하고, Red Hat Single Sign-On 데이터베이스의 firstNamelastname 속성에 이름을 매핑합니다. LDAP 배포에는 cn 이 사용자 전체 이름을 포함하는 것이 일반적입니다.
참고

Red Hat Single Sign-On에 새 사용자를 등록하고 LDAP 공급자 의 동기화 등록이 ON인 경우 fullName 매퍼는 사용자 이름으로 대체할 수 있습니다. 이 대체 기능은 Microsoft Active Directory (MSAD)를 사용할 때 유용합니다. MSAD에 대한 일반적인 설정은 cn LDAP 속성을 fullName으로 구성하는 것이며, 동시에 LDAP 공급자 구성의 RDN LDAP 속성으로 cn LDAP 속성을 사용합니다. 이 설정에서 Red Hat Single Sign-On은 사용자 이름으로 대체됩니다. 예를 들어 Red Hat Single Sign-On 사용자 "john123"을 생성하고 firstName과 lastName을 비워 두는 경우 fullname 매퍼는 LDAP의 cn 값으로 "john123"을 저장합니다. firstName 및 lastName에 "John Doe"를 입력하면 전체 이름 매퍼는 사용자 이름으로 다시 떨어지면 LDAP cn 을 "John Doe" 값으로 업데이트하는 것이 필요하지 않습니다.

하드 코딩된 속성 맵퍼
이 매퍼는 LDAP에 연결된 각 Red Hat Single Sign-On 사용자에게 하드 코딩된 속성 값을 추가합니다. 이 매퍼는 활성화된 또는 emailVerified 사용자 속성에 대한 값을 강제 적용할 수도 있습니다.
역할 맵퍼
이 매퍼는 LDAP에서 Red Hat Single Sign-On 역할 매핑으로의 역할 매핑을 구성합니다. 단일 역할 매퍼는 LDAP 역할(일반적으로 LDAP 트리의 특정 분기의 그룹)을 지정된 클라이언트의 영역 역할 또는 클라이언트 역할에 해당하는 역할에 매핑할 수 있습니다. 동일한 LDAP 공급자에 대해 더 많은 역할 매퍼를 구성할 수 있습니다. 예를 들어 ou=main,dc=example,dc=org 아래의 그룹에서 영역 역할 매핑에 매핑한 그룹 및 ou= finance,dc=example,dc=org 맵에 있는 그룹의 역할 매핑을 클라이언트 progress의 클라이언트 역할 매핑으로 지정할 수 있습니다.
하드 코딩된 역할 맵퍼
이 매퍼는 지정된 Red Hat Single Sign-On 역할을 LDAP 공급자의 각 Red Hat Single Sign-On 사용자에게 부여합니다.
그룹 맵퍼
이 매퍼는 LDAP 트리의 분기의 LDAP 그룹을 Red Hat Single Sign-On 내의 그룹에 매핑합니다. 또한 이 매퍼는 LDAP의 user-group 매핑을 Red Hat Single Sign-On의 사용자 그룹 매핑으로 전파합니다.
MSAD 사용자 계정 맵퍼
이 매퍼는 Microsoft Active Directory (MSAD)에 한정되어 있습니다. MSAD 사용자 계정 상태를 활성화된 계정 또는 만료된 암호와 같은 Red Hat Single Sign-On 계정 상태에 통합할 수 있습니다. 이 매퍼는 userAccountControl, pwdLastSet LDAP 속성을 사용하며, MSAD와 관련된 LDAP 속성을 사용하며 LDAP 표준은 아닙니다. 예를 들어 pwdLastSet 값이 0 이면 Red Hat Single Sign-On 사용자가 암호를 업데이트해야 합니다. 그 결과 사용자에게 UPDATE_PASSWORD 필수 작업이 추가됩니다. userAccountControl 값이 514 (비활성화된 계정)이면 Red Hat Single Sign-On 사용자가 비활성화됩니다.
인증서 맵퍼
이 매퍼는 X.509 인증서를 매핑합니다. Red Hat Single Sign-On은 X.509 인증 및 Full 인증서와 함께 PEM 형식의 ID 소스로 사용합니다. 이 매퍼는 사용자 속성 맵퍼와 유사하게 작동하지만 Red Hat Single Sign-On은 PEM 또는 DER 형식 인증서를 저장하는 LDAP 속성에 대해 필터링할 수 있습니다. 이 매퍼를 사용하여 LDAP에서 항상 읽기 값을 활성화합니다.

사용자 이름, firstname, lastname, email과 같은 기본 Red Hat Single Sign-On 사용자 속성을 해당 LDAP 속성에 매핑하는 사용자 속성 매퍼입니다. 이러한 항목을 확장하고 추가 속성 매핑을 제공할 수 있습니다. 관리 콘솔은 해당 매퍼를 구성하는 데 도움이 되는 툴팁을 제공합니다.

4.3.8. 암호 해시

Red Hat Single Sign-On에서 암호를 업데이트하면 Red Hat Single Sign-On에서 일반 텍스트 형식으로 암호를 보냅니다. 이 작업은 기본 제공 Red Hat Single Sign-On 데이터베이스의 암호를 업데이트하는 것과 다릅니다. 여기서 Red Hat Single Sign-On 해시 및 암호를 데이터베이스로 보내기 전에 암호를 압축합니다. LDAP의 경우 Red Hat Single Sign-On은 LDAP 서버를 사용하여 암호를 해시하고 해석합니다.

기본적으로 MSAD, RHDS 또는 FreeIPA 해시 및 압축 암호와 같은 LDAP 서버입니다. RFC3062 에 설명된 대로 LDAPv3 Password Modify Extended Operation 을 사용하지 않는 한 OpenLDAP 또는 ApacheDS와 같은 기타 LDAP 서버는 암호를 일반 텍스트로 저장합니다. LDAP 구성 페이지에서 LDAPv3 Password Modify Extended Operation을 활성화합니다. 자세한 내용은 LDAP 서버 설명서를 참조하십시오.

주의

항상 ldapsearch 및 base64code the userPassword 특성 값을 사용하여 변경된 디렉터리 항목을 검사하여 사용자 암호가 올바르게 해시되고 일반 텍스트로 저장되지 않았는지 확인합니다.

4.3.9. 문제 해결

org.keycloak.storage.ldap 범주의 TRACE로 로깅 수준을 높이는 것이 유용합니다. 이 설정을 사용하면 LDAP 서버에 대한 모든 쿼리에 대한 로깅 로깅 및 쿼리를 보내는 데 사용된 매개 변수를 포함하여 많은 로깅 메시지가 TRACE 수준에 서버 로그에 전송됩니다. 사용자 포럼 또는 JIRA에 LDAP 질문을 생성할 때 활성화된 TRACE 로깅으로 서버 로그를 연결하는 것이 좋습니다. 이 방법이 너무 크면 작업 중에 로그에 추가된 메시지와 함께 서버 로그의 스니펫만 포함하는 것이 좋습니다. 이로 인해 문제가 발생합니다.

  • LDAP 공급자를 생성할 때 서버 로그에 다음과 같이 INFO(정보) 수준에 메시지가 표시됩니다.

    When you create LDAP provider, message appear in the server log in the INFO level starting with:
Creating new LDAP Store for the LDAP storage provider: ...

LDAP 공급자의 구성이 표시됩니다. 질문을 하거나 버그를 보고하기 전에 이 메시지를 포함하여 LDAP 구성을 표시하는 것이 좋습니다. 결국 일부 자리 표시자 값으로 포함하지 않는 일부 구성 변경 사항을 자유롭게 교체할 수 있습니다. 한 예로 bindDn=some-placeholder 가 있습니다. connectionUrl 의 경우 자유롭게 교체할 수 있지만 일반적으로 사용되는 프로토콜(ldap vs ldaps)을 포함하는 것이 유용합니다. 마찬가지로 DEBUG 수준에서 다음과 같이 메시지와 함께 표시되는 LDAP 매퍼 구성에 대한 세부 정보를 포함하는 것이 유용할 수 있습니다.

Mapper for provider: XXX, Mapper name: YYY, Provider: ZZZ ...

이러한 메시지는 DEBUG 로깅이 활성화된 경우에만 표시됩니다.

  • 성능 또는 연결 풀링 문제를 추적하려면 속성 연결 풀 디버그 수준의 값을 설정하는 것이 좋습니다.For tracking the performance or connection pooling issues, consider setting the value of property Connection Pool Debug Level of

성능 또는 연결 풀링 문제를 추적하려면 LDAP 공급자의 연결 풀 디버그 수준 속성 값을 all 값으로 설정하는 것이 좋습니다. 그러면 LDAP 연결 풀링에 포함된 로깅을 사용하여 서버 로그에 많은 추가 메시지가 추가됩니다. 이는 연결 풀링 또는 성능과 관련된 문제를 추적하는 데 사용할 수 있습니다.

참고

연결 풀링의 구성을 변경한 후 LDAP 공급자 연결의 다시 초기화를 적용하려면 Keycloak 서버를 다시 시작해야 할 수 있습니다.

서버를 다시 시작한 후에도 연결 풀링에 대한 메시지가 더 이상 나타나지 않으면 LDAP 서버에서 연결 풀링이 작동하지 않음을 나타낼 수 있습니다.

  • LDAP 문제를 보고하는 경우 LDAP 트리의 일부를 대상 데이터에 첨부하여 환경에 문제가 발생할 수 있습니다. 예를 들어 일부 사용자의 로그인에 시간이 오래 걸리는 경우 다양한 "group" 항목의 멤버 속성 수를 보여주는 LDAP 항목을 연결하는 것이 좋습니다. 이 경우 Red Hat Single Sign-On의 일부 그룹 LDAP 매퍼(또는 Role LDAP Mapper)에 매핑된 그룹 항목을 추가하는 것이 유용할 수 있습니다.

LDAP 문제를 보고하는 경우 LDAP 트리의 일부를 대상 데이터에 첨부하여 환경에 문제가 발생할 수 있습니다. 예를 들어 일부 사용자의 로그인에 시간이 오래 걸리는 경우 다양한 "group" 항목의 멤버 속성 수를 보여주는 LDAP 항목을 연결하는 것이 좋습니다. 이 경우 Red Hat Single Sign-On의 일부 그룹 LDAP 매퍼(또는 Role LDAP Mapper)에 매핑된 그룹 항목을 추가하는 것이 유용할 수 있습니다.

4.4. SSSD 및 FreeIPA ID 관리 통합

Red Hat Single Sign-On에는 SSSD(System Security Services Daemon) 플러그인이 포함되어 있습니다. SSSD는 Fedora 및 RHEL(Red Hat Enterprise Linux)의 일부이며 여러 ID 및 인증 공급자에 대한 액세스를 제공합니다. SSSD는 장애 조치(failover) 및 오프라인 지원과 같은 이점도 제공합니다. 자세한 내용은 Red Hat Enterprise Linux Identity Management 설명서를 참조하십시오.

SSSD는 FreeIPA IdM(Identity Management) 서버와 통합되어 인증 및 액세스 제어를 제공합니다. 이러한 통합을 통해 Red Hat Single Sign-On은 권한 있는 액세스 관리(PAM) 서비스에 대해 인증하고 SSSD에서 사용자 데이터를 검색할 수 있습니다. Linux 환경에서 Red Hat Identity Management 사용에 대한 자세한 내용은 Red Hat Enterprise Linux Identity Management 설명서를 참조하십시오.

keycloak sssd freeipa integration overview

Red Hat Single Sign-On 및 SSSD는 읽기 전용 D-Bus 인터페이스를 통해 통신합니다. 따라서 사용자를 프로비저닝하고 업데이트하는 방법은 FreeIPA/IdM 관리 인터페이스를 사용하는 것입니다. 기본적으로 인터페이스는 사용자 이름, 이메일, 이름, 성을 가져옵니다.

참고

Red Hat Single Sign-On은 그룹과 역할을 자동으로 등록하지만 동기화는 하지 않습니다. Red Hat Single Sign-On 관리자의 변경 사항은 SSSD와 동기화되지 않습니다.

4.4.1. FreeIPA/IdM 서버

FreeIPA Docker 이미지는 Docker Hub에서 사용할 수 있습니다. FreeIPA 서버를 설정하려면 FreeIPA 문서를 참조하십시오.

절차

  1. 다음 명령을 사용하여 FreeIPA 서버를 실행합니다.

     docker run --name freeipa-server-container -it \
     -h server.freeipa.local -e PASSWORD=YOUR_PASSWORD \
     -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
     -v /var/lib/ipa-data:/data:Z freeipa/freeipa-server

    server.freeipa.local 을 사용하는 매개변수 -h 는 FreeIPA/IdM 서버 호스트 이름을 나타냅니다. 자신의 암호로 _PASSWORD 를 변경합니다.

  2. 컨테이너가 시작된 후 다음을 포함하도록 /etc/hosts 파일을 변경합니다.

    x.x.x.x     server.freeipa.local

    이 변경을 수행하지 않으면 DNS 서버를 설정해야 합니다.

  3. 다음 명령을 사용하여 Linux 서버를 IPA 도메인에 등록하여 Red Hat Single Sign-On에서 SSSD 페더레이션 공급자를 시작하고 실행합니다.

     ipa-client-install --mkhomedir -p admin -w password
  4. 클라이언트에서 다음 명령을 실행하여 설치가 작동하는지 확인합니다.

     kinit admin
  5. 암호를 입력합니다.
  6. 다음 명령을 사용하여 IPA 서버에 사용자를 추가합니다.

    $ ipa user-add <username> --first=<first name> --last=<surname> --email=<email address> --phone=<telephoneNumber> --street=<street> \      --city=<city> --state=<state> --postalcode=<postal code> --password
  7. kinit를 사용하여 사용자 암호를 강제로 설정합니다.

     kinit <username>
  8. 다음을 입력하여 일반 IPA 작업을 복원합니다.

    kdestroy -A
    kinit admin

4.4.2. SSSD 및 D-Bus

페더레이션 공급자는 D-BUS를 사용하여 SSSD에서 데이터를 가져옵니다. PAM을 사용하여 데이터를 인증합니다.

절차

  1. sssd-dbus RPM을 설치합니다.

    $ sudo yum install sssd-dbus
  2. 다음 프로비저닝 스크립트를 실행합니다.

    $ bin/federation-sssd-setup.sh

    이 스크립트는 /etc/sssd/sssd.conf 에 다음과 같이 변경합니다.

      [domain/your-hostname.local]
      ...
      ldap_user_extra_attrs = mail:mail, sn:sn, givenname:givenname, telephoneNumber:telephoneNumber
      ...
      [sssd]
      services = nss, sudo, pam, ssh, ifp
      ...
      [ifp]
      allowed_uids = root, yourOSUsername
      user_attributes = +mail, +telephoneNumber, +givenname, +sn
  3. dbus-send 를 실행하여 설정이 성공했는지 확인합니다.

    sudo dbus-send --print-reply --system --dest=org.freedesktop.sssd.infopipe /org/freedesktop/sssd/infopipe org.freedesktop.sssd.infopipe.GetUserGroups string:john

    설정이 성공하면 사용자 그룹이 표시됩니다. 이 명령에서 시간 초과 또는 오류를 반환하면 Red Hat Single Sign-On에서 실행되는 페더레이션 공급자는 데이터를 검색할 수 없습니다. 이 오류는 일반적으로 서버가 FreeIPA IdM 서버에 등록되어 있지 않거나 SSSD 서비스에 액세스할 수 있는 권한이 없기 때문에 발생합니다.

    SSSD 서비스에 액세스할 수 있는 권한이 없는 경우 Red Hat Single Sign-On 서버를 실행하는 사용자가 다음 섹션의 /etc/sssd/sssd.conf 파일에 있는지 확인합니다.

    [ifp]
    allowed_uids = root, your_username

4.4.3. SSSD 페더레이션 공급자 활성화

Red Hat Single Sign-On은 DBus-Java를 사용하여 D-Bus와 낮은 수준으로 통신합니다. D-Bus는 Unix 소켓 라이브러리에 따라 다릅니다.

SSSD 페더레이션 공급자를 활성화하기 전에 이 라이브러리의 RPM을 설치합니다.

$ sudo yum install rh-sso7-libunix-dbus-java

Red Hat Single Sign-On은 JNA를 사용하여 PAM에 인증합니다. JAN 패키지가 설치되어 있는지 확인합니다.

$ sudo yum install jna

sssctl user-checks 명령을 사용하여 설정을 검증합니다.

  $ sudo sssctl user-checks admin -s keycloak

4.5. 페더레이션 SSSD 저장소 구성

설치 후 페더레이션 SSSD 저장소를 구성합니다.

절차

  1. 메뉴에서 User Federation 을 클릭합니다.
  2. Add Provider 목록에서 sssd 를 선택합니다. Red Hat Single Sign-On은 sssd 구성 페이지로 이동합니다.
  3. 저장을 클릭합니다.

이제 FreeIPA/IdM 자격 증명을 사용하여 Red Hat Single Sign-On에 대해 인증할 수 있습니다.

4.6. 사용자 정의 공급자

Red Hat Single Sign-On에는 사용자 정의 공급자를 개발하기 위한 사용자 스토리지 페더레이션을 위한 SPI(Service Provider Interface)가 있습니다. 서버 개발자 가이드에서 고객 공급자 개발에 대한 설명서를 찾을 수 있습니다.

5장. 사용자 관리

관리 콘솔에서 사용자를 관리하기 위해 수행할 수 있는 다양한 작업이 있습니다.

5.1. 사용자 생성

해당 사용자에게 필요한 애플리케이션을 보유하려는 영역에서 사용자를 생성합니다. 다른 영역을 생성하는 데만 사용되는 마스터 영역에 사용자를 생성하지 않도록 합니다.

사전 요구 사항

  • 마스터 영역이 아닌 다른 영역에 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다.
  2. 사용자 추가를 클릭합니다.
  3. 새 사용자에 대한 세부 정보를 입력합니다.

    참고

    username 은 유일한 필수 필드입니다.

  4. 저장을 클릭합니다. 세부 정보를 저장하면 새 사용자에 대한 관리 페이지가 표시됩니다.

5.2. 사용자 인증 정보 정의

인증 정보 탭에서 사용자의 인증 정보를 관리할 수 있습니다.

인증 정보 관리

user credentials

이 탭에는 다음 필드가 포함됩니다.

위치
위치 열의 화살표 버튼을 사용하면 사용자에 대한 자격 증명의 우선 순위를 변경할 수 있습니다. 최상위 인증 정보에는 우선순위가 가장 높습니다. 우선순위는 사용자가 로그인한 후 먼저 표시되는 인증 정보를 결정합니다.
유형
이 열에는 인증 정보 유형(예: 암호 또는 OTP )이 표시됩니다.
사용자 라벨
이는 로그인 중에 선택 옵션으로 표시될 때 인증 정보를 인식하는 할당 가능한 레이블입니다. 인증 정보를 설명하기 위해 임의의 값으로 설정할 수 있습니다.
data
이는 자격 증명에 대한 기밀적이지 않은 기술 정보입니다. 기본적으로 숨겨져 있습니다. Show data…​ 을 클릭하여 인증 정보 데이터를 표시할 수 있습니다.
작업
이 열에는 두 가지 작업이 있습니다. 저장 을 클릭하여 값 또는 사용자 필드를 기록합니다. 삭제를 클릭하여 인증 정보를 제거합니다.

관리 콘솔에서 특정 사용자에 대해 다른 유형의 자격 증명을 구성할 수 없습니다. 해당 작업은 사용자의 책임입니다.

사용자가 OTP 장치를 손실하거나 인증 정보가 손상된 경우 사용자의 인증 정보를 삭제할 수 있습니다. 인증 정보 탭에서 사용자의 인증 정보만 삭제할 수 있습니다.

5.2.1. 사용자의 암호 설정

사용자에게 암호가 없거나 암호가 삭제된 경우 Set Password 섹션이 표시됩니다.

사용자에게 이미 암호가 있는 경우 Reset Password (암호 재설정) 섹션에서 재설정할 수 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다. 사용자 페이지가 표시됩니다.
  2. 사용자를 선택합니다.
  3. 인증 정보 탭을 클릭합니다.
  4. Set Password (암호 설정) 섹션에 새 암호를 입력합니다.
  5. Set Password 를 클릭합니다.

    참고

    TemporaryON 인 경우 사용자가 처음 로그인할 때 암호를 변경해야 합니다. 사용자가 암호를 제공하도록 허용하려면 TemporaryOFF로 설정합니다. 사용자가 암호를 변경하려면 암호 설정을 클릭해야 합니다.

  6. 또는 사용자가 암호를 재설정하도록 요청하는 이메일을 사용자에게 보낼 수도 있습니다.

    1. Credential Reset 아래의 Reset Actions (작업 재설정) 목록으로 이동합니다.
    2. 목록에서 Update Password 를 선택합니다.
    3. 이메일 보내기 를 클릭합니다. 전송된 이메일에는 사용자를 Update Password 창으로 보내는 링크가 포함되어 있습니다.
    4. 필요한 경우 이메일 링크의 유효성을 설정할 수 있습니다. 이는 VMDK 설정의 토큰 탭에서 기본 사전 설정으로 설정됩니다.

5.2.2. OTP 생성

해당 영역에서 OTP가 조건부인 경우 사용자는 Red Hat Single Sign-On 계정 콘솔로 이동하여 새 OTP 생성기를 재구성해야 합니다. OTP가 필요한 경우 사용자는 로그인할 때 새 OTP 생성기를 재구성해야 합니다.

또는 사용자가 OTP 생성기를 재설정하도록 요청하는 이메일을 사용자에게 보낼 수 있습니다. 다음 절차는 사용자에게 OTP 인증 정보가 이미 있는 경우에도 적용됩니다.

사전 요구 사항

  • 적절한 영역에 로그인되어 있습니다.

절차

  1. 메인 메뉴에서 사용자를 클릭합니다. 사용자 페이지가 표시됩니다.
  2. 사용자를 선택합니다.
  3. 인증 정보 탭을 클릭합니다.
  4. Reset Actions (작업 재설정) 목록으로 이동합니다.
  5. Configure OTP 를 클릭합니다.
  6. 이메일 보내기 를 클릭합니다. 전송된 이메일에는 사용자를 OTP 설정 페이지로 보내는 링크가 포함되어 있습니다.

5.3. 사용자 속성 구성

사용자 속성은 각 사용자에 대한 사용자 지정 환경을 제공합니다. 사용자 속성을 구성하여 콘솔의 각 사용자에 대해 개인화된 ID를 생성할 수 있습니다.

사용자

user attributes

사전 요구 사항

  • 사용자가 존재하는 영역에 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다.
  2. 관리할 사용자를 선택합니다.
  3. 특성 탭을 클릭합니다.
  4. 필드에 속성 이름을 입력합니다.
  5. Value 필드에 특성 값을 입력합니다.
  6. 추가를 클릭합니다.
  7. 저장을 클릭합니다.
참고

일부 읽기 전용 속성은 관리자가 업데이트하지 않습니다. 여기에는 LDAP 공급자가 자동으로 채워지는 LDAP_ID 와 같은 설계에 따라 읽기 전용 속성이 포함됩니다. 기타 일부 속성은 보안상의 이유로 일반적인 사용자 관리자에 대해 읽기 전용이어야 합니다. 보안 위협 완화 장에서 자세한 내용을 참조하십시오.

5.4. 사용자가 직접 등록할 수 있도록 허용

Red Hat Single Sign-On을 타사 권한 부여 서버로 사용하여 자체 등록한 사용자를 포함하여 애플리케이션 사용자를 관리할 수 있습니다. 자체 등록 기능을 활성화하면 로그인 페이지에 사용자가 계정을 만들 수 있도록 등록 링크가 표시됩니다.

등록 링크

registration link

사용자가 등록을 완료하려면 등록 양식에 프로필 정보를 추가해야 합니다. 등록 양식은 사용자가 완료해야 하는 필드를 제거하거나 추가하여 사용자 지정할 수 있습니다.

추가 리소스

5.4.1. 사용자 등록 활성화

사용자가 직접 등록할 수 있도록 합니다.

절차

  1. 메인 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 로그인 탭을 클릭합니다.
  3. 사용자 등록 토글을 ON 으로 전환합니다.
  4. 저장을 클릭합니다.

이 설정을 활성화하면 Admin Console의 로그인 페이지에 Register 링크가 표시됩니다.

5.4.2. 새 사용자로 등록

새 사용자는 처음으로 로그인하려면 등록 양식을 작성해야 합니다. 등록할 프로필 정보와 암호를 추가합니다.

등록 양식

registration form

사전 요구 사항

  • 사용자 등록이 가능합니다.

절차

  1. 로그인 페이지에서 등록 링크를 클릭합니다. 등록 페이지가 표시됩니다.
  2. 사용자 프로필 정보를 입력합니다.
  3. 새 암호를 입력합니다.
  4. 저장을 클릭합니다.

5.5. 로그인 시 필요한 작업 정의

사용자가 처음 로그인할 때 수행해야 하는 작업을 설정할 수 있습니다. 이러한 작업은 사용자가 자격 증명을 제공한 후 필요합니다. 처음 로그인 후에는 이러한 작업이 더 이상 필요하지 않습니다. 해당 사용자의 세부 정보 탭에 필요한 작업을 추가합니다.

다음은 필요한 작업 유형의 예입니다.

암호 업데이트
사용자가 암호를 변경해야 합니다.
OTP 구성
사용자는 Free OTP 또는 Google Authenticator 애플리케이션을 사용하여 모바일 장치에서 일회성 암호 생성기를 구성해야 합니다.
이메일 확인
사용자는 이메일 계정을 확인해야 합니다. 클릭해야 하는 검증 링크가 있는 이메일을 사용자에게 보냅니다. 이 워크플로우가 완료되면 사용자가 로그인할 수 있습니다.
프로필 업데이트
사용자는 이름, 주소, 이메일, 전화 번호와 같은 프로필 정보를 업데이트해야 합니다.

5.5.1. 한 사용자에게 필요한 작업 설정

모든 사용자에게 필요한 작업을 설정할 수 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다.
  2. 목록에서 사용자를 선택합니다.
  3. 필요한 사용자 작업 목록으로 이동합니다.

    user required action

  4. 계정에 추가할 모든 작업을 선택합니다.
  5. 작업 이름 옆에 있는 X 를 클릭하여 제거합니다.
  6. 추가할 작업을 선택한 후 저장 을 클릭합니다.

5.5.2. 모든 사용자에게 필요한 작업 설정

모든 새 사용자를 처음 로그인하기 전에 필요한 작업을 지정할 수 있습니다. 요구 사항은 사용자 페이지의 사용자 추가 버튼을 통해 생성된 사용자 또는 로그인 페이지의 등록 링크에 적용됩니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 필요한 작업 탭을 클릭합니다.
  3. 하나 이상의 필수 작업에 대해 Default Action (기본 작업) 열에서 확인란을 클릭합니다. 새 사용자가 처음 로그인하면 선택한 작업을 실행해야 합니다.

5.5.3. 필수 조치로 용어 및 조건 활성화

Red Hat Single Sign-On에 처음 로그인하기 전에 새 사용자가 약관을 수락해야 하는 필수 조치를 활성화할 수 있습니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 필요한 작업 탭을 클릭합니다.
  3. 약관 및 조건 작업을 활성화합니다.
  4. 기본 로그인 주제에서 terms.ftl 파일을 편집합니다.

추가 리소스

5.6. 사용자 검색

사용자를 검색하여 사용자 그룹 및 역할과 같은 사용자에 대한 자세한 정보를 봅니다.

사전 요구 사항

  • 사용자가 존재하는 영역에 있습니다.

절차

  1. 메인 메뉴에서 사용자를 클릭합니다. 이 사용자 페이지가 표시됩니다.
  2. 검색 상자에 검색하려는 사용자의 전체 이름, 성, 이름 또는 이메일 주소를 입력합니다. 검색은 기준과 일치하는 모든 사용자를 반환합니다.
  3. 또는 모든 사용자 보기를 클릭하여 시스템의 모든 사용자를 나열할 수 있습니다.

    참고

    이 작업은 LDAP와 같은 페더레이션 데이터베이스가 아닌 로컬 Red Hat Single Sign-On 데이터베이스만 검색합니다. 페더레이션 데이터베이스의 백엔드에는 사용자를 검색할 수 있는 페이지 등록 메커니즘이 없습니다.

    1. 페더레이션 백엔드에서 사용자를 검색하려면 사용자 목록을 Red Hat Single Sign-On 데이터베이스와 동기화해야 합니다. 백엔드 사용자를 Red Hat Single Sign-On 데이터베이스와 동기화하도록 검색 기준을 조정합니다.
    2. 또는 왼쪽 메뉴에서 User Federation 을 클릭합니다.

      1. 선택한 사용자에게 변경 사항을 적용하려면 페이지에서 변경된 사용자 동기화 를 귀하의 페더레이션 공급자와 클릭합니다.
      2. 데이터베이스의 모든 사용자에게 변경 사항을 적용하려면 페이지의 모든 사용자 동기화 를 통합 공급자와 클릭합니다.

추가 리소스

5.7. 사용자 삭제

더 이상 애플리케이션에 액세스할 필요가 없는 사용자를 삭제할 수 있습니다. 사용자가 삭제되면 사용자 프로필 및 데이터도 삭제됩니다.

절차

  1. 메뉴에서 사용자를 클릭합니다. 사용자 페이지가 표시됩니다.
  2. View all users 를 클릭하여 삭제할 사용자를 찾습니다.

    참고

    또는 검색바를 사용하여 사용자를 찾을 수 있습니다.

  3. 삭제 하려는 사용자 옆에 있는 삭제를 클릭하고 삭제를 확인합니다.

5.8. 사용자의 계정 삭제 활성화

관리 콘솔에서 이 기능을 활성화하면 최종 사용자 및 애플리케이션은 계정 콘솔에서 계정을 삭제할 수 있습니다. 이 기능을 활성화하면 특정 사용자에게 해당 기능을 제공할 수 있습니다.

5.8.1. 계정 삭제 기능 활성화

필수 작업 탭에서 이 기능을 활성화합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 필요한 작업 탭을 클릭합니다.
  3. 계정 삭제 행에서 활성화를 선택합니다.

    필요한 작업 탭의 계정 삭제

    enable delete account action

5.8.2. 사용자에게 delete-account 역할 제공

특정 사용자에게 계정을 삭제할 수 있는 역할을 제공할 수 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다.
  2. 사용자를 선택합니다.
  3. Role Mappings 탭을 클릭합니다.
  4. 클라이언트 역할 목록에서 계정을 선택합니다.
  5. Available Roles (사용 가능한 역할)에서 delete-account 를 선택합니다.
  6. 선택한 추가 를 클릭합니다.

    delete-account 역할

    delete-account role

5.8.3. 계정 삭제

delete-account 역할이 있으면 자체 계정을 삭제할 수 있습니다.

  1. 계정 콘솔에 로그인합니다.
  2. 개인 정보 페이지 하단에서 계정 삭제 를 클릭합니다.

    계정 페이지 삭제

    delete account page

  3. 자격 증명을 입력하고 삭제를 확인합니다.

    확인 삭제

    delete account confirm

    참고

    이 작업은 되돌릴 수 없습니다. Red Hat Single Sign-On의 모든 데이터가 삭제됩니다.

5.9. 사용자 가장

적절한 권한이 있는 관리자는 사용자를 가장할 수 있습니다. 예를 들어 사용자가 애플리케이션에 버그가 있는 경우 관리자는 사용자를 가장하여 문제를 조사하거나 복제할 수 있습니다.

영역에서 가장 역할을 하는 모든 사용자는 사용자를 가장할 수 있습니다.

user details

  • 관리자와 사용자가 동일한 영역에 있으면 관리자가 로그아웃되고 가장되는 사용자로 자동으로 로그인됩니다.
  • 관리자와 사용자가 다른 영역에 있는 경우 관리자는 로그인된 상태로 유지되며, 또한 해당 사용자 영역에 사용자로 로그인됩니다.

두 경우 모두 가장된 사용자의 사용자 계정 관리 페이지가 표시됩니다.

사용자 페이지의 세부 정보 탭에서 Impersonate 버튼에 액세스할 수 있습니다.

추가 리소스

5.10. reCAPTCHA 활성화

Red Hat Single Sign-On은 봇으로부터 등록을 보호하기 위해 Google reCAPTCHA와 통합되어 있습니다.

reCAPTCHA이 활성화되면 로그인할 때 register.ftl 을 편집하여 등록 페이지에서 reCAPTCHA 버튼의 배치 및 조정을 구성할 수 있습니다.

절차

  1. 브라우저에 다음 URL을 입력합니다.

    https://developers.google.com/recaptcha/
  2. reCAPTCHA 사이트 키와 시크릿을 가져올 API 키를 생성합니다. 이 절차에서 나중에 사용할 수 있도록 reCAPTCHA 사이트 키와 시크릿을 기록해 둡니다.

    참고

    localhost는 기본적으로 작동합니다. 도메인을 지정할 필요가 없습니다.

  3. Red Hat Single Sign-On 관리 콘솔로 이동합니다.
  4. 메뉴에서 인증을 클릭합니다.
  5. 흐름 탭을 클릭합니다.
  6. 드롭다운 메뉴에서 등록을 선택합니다.
  7. reCAPTCHA 요구 사항을 Required 로 설정합니다. 이를 통해 reCAPTCHA을 사용할 수 있습니다.
  8. reCAPTCHA 흐름 항목 오른쪽에 있는 작업을 클릭합니다.
  9. Config 링크를 클릭합니다.

    reCAPTCHA 구성 페이지

    recaptcha config

    1. Google reCAPTCHA 웹 사이트에서 생성된 Recaptcha 사이트 키 를 입력합니다.
    2. Google reCAPTCHA 웹 사이트에서 생성된 Recaptcha 시크릿 을 입력합니다.
  10. 등록 페이지를 iframe으로 사용하도록 Google에 권한을 부여합니다.

    참고

    Red Hat Single Sign-On에서는 웹 사이트에 iframe 로그인 페이지 대화 상자를 포함할 수 없습니다. 이 제한은 클릭재킹 공격을 방지하기 위한 것입니다. Red Hat Single Sign-On에 설정된 기본 HTTP 응답 헤더를 변경해야 합니다.

    1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
    2. 보안 탭을 클릭합니다.
    3. X-Forwarded-Options 헤더 필드에 https://www.google.com 를 입력합니다.
    4. Content-Security-Policy 헤더 필드에 https://www.google.com 를 입력합니다.

추가 리소스

5.11. 사용자 프로필 정의

Red Hat Single Sign-On에서 사용자는 속성 세트와 연결되어 있습니다. 이러한 속성은 Red Hat Single Sign-On 내의 사용자를 더 잘 설명하고 식별하며 애플리케이션에 대한 추가 정보를 전달하는 데 사용됩니다.

사용자 프로필은 사용자 특성을 나타내고 영역 내에서 관리되는 방법을 나타내는 잘 정의된 스키마를 정의합니다. 이를 통해 관리자는 사용자 정보에 대한 일관된 보기를 제공하여 속성 관리 방법에 대한 다양한 측면을 제어하고 추가 특성을 지원하기 위해 Red Hat Single Sign-On을 훨씬 쉽게 확장할 수 있습니다.

다른 기능 중에서 사용자 프로필을 사용하면 관리자가 다음을 수행할 수 있습니다.

  • 사용자 속성에 대한 스키마 정의
  • 컨텍스트 정보에 따라 속성이 필요한지 여부를 정의합니다(예: 사용자 또는 관리자만 필요한 경우 또는 요청된 범위에 따라 둘 다 필요한 경우)
  • 사용자 속성 보기 및 편집에 대한 특정 권한을 정의하여 일부 속성을 보거나 변경할 수 없는 강력한 개인 정보 보호 요구 사항을 준수할 수 있습니다(관리자 포함)
  • 사용자 정보가 항상 업데이트되고 속성과 관련된 메타데이터 및 규칙을 준수하도록 사용자 프로필 컴플라이언스를 동적으로 적용
  • 기본 제공 유효성 검사기를 활용하거나 사용자 지정 항목을 작성하여 특성별로 유효성 검사 규칙을 정의합니다.
  • 특성 정의에 따라 사용자가 등록, 업데이트 프로파일, 브로커링 및 개인 정보와 같이 상호 작용하는 양식을 동적으로 렌더링합니다.

사용자 프로필 기능은 User Profile SPI에 의해 지원됩니다. 기본적으로 이러한 기능은 비활성화되어 있으며 영역은 기존 동작과 역호환성을 유지하는 기본 구성을 사용하도록 구성됩니다.

참고

레거시 동작은 사용자 이름, 이메일, 이름, 사용자 정의 속성 관리 방법에 대한 제한 없이 Red Hat Single Sign-On에서 사용하는 기본 제약 조건을 유지하는 것입니다. 계정 콘솔을 통한 계정 등록, 프로파일 업데이트, 브로커링 및 관리와 같은 사용자 흐름과 관련하여 사용자는 앞서 언급한 속성을 사용하여 추가 속성을 지원하기 위해 이전에 지정한 특성을 변경할 수 있습니다.

Red Hat Single Sign-On을 이미 사용 중인 경우 기존 동작으로 지금까지 사용 중인 것입니다.

기존 동작과 달리 선언적 공급자는 관리 콘솔 및 잘 정의된 JSON 스키마를 통해 영역에 사용자 프로필 구성을 정의할 수 있는 유연성을 제공합니다.

다음 섹션에서는 선언적 공급자를 사용하여 자체 사용자 프로필 구성을 정의하는 방법을 살펴보겠습니다.

참고

향후 Red Hat Single Sign-On에서는 레거시 동작이 더 이상 지원되지 않습니다. 이상적으로 User Profile에서 제공하는 새로운 기능을 살펴보고 그에 따라 해당 영역을 마이그레이션해야 합니다.

5.11.1. 사용자 프로필 활성화

참고

선언적 사용자 프로필은 기술 프리뷰 이며 완전히 지원되지 않습니다. 이 기능은 기본적으로 비활성화되어 있습니다.

-Dkeycloak.profile=preview 또는 -Dkeycloak.profile.feature.declarative_user_profile=enabled 를 사용하여 서버를 시작하려면 다음을 수행합니다. 자세한 내용은 프로필을 참조하십시오.

declarative_user_profile 기능을 활성화하는 것 외에도 영역에 대해 User Profile을 활성화해야 합니다. 이렇게 하려면 왼쪽 메뉴에서 CloudEvent Settings 링크를 클릭하고 User Profile Enabled 스위치를 켭니다.

user profile enabling

활성화한 후 저장 버튼을 클릭하면 사용자 속성에 대한 구성을 관리할 수 있는 위치에서 User Profile (사용자 프로필) 탭에 액세스할 수 있습니다.

영역의 사용자 프로필을 활성화하면 Red Hat Single Sign-On은 사용자 프로필 구성에 따라 속성을 관리하는 방법에 대한 추가 제약 조건이 적용됩니다. 요약하면 이 기능이 활성화될 때 예상되는 사항 목록은 다음과 같습니다.

  • 관리 관점에서 사용자 세부 정보 페이지의 속성 탭에는 사용자 프로필 구성에 정의된 속성만 표시됩니다. 특성별로 정의된 조건도 특성을 관리할 때 고려됩니다.
  • 계정 콘솔의 등록, 업데이트 프로파일, 브로커링 및 개인 정보와 같은 사용자 대면 양식은 사용자 프로필 구성에 따라 동적으로 렌더링됩니다. 이를 위해 Red Hat Single Sign-On은 서로 다른 템플릿을 사용하여 이러한 양식을 동적으로 렌더링할 예정입니다.

다음 주제에서는 사용자 프로필 구성을 관리하는 방법과 해당 구성이 귀하의 영역에 미치는 영향에 대해 살펴보겠습니다.

5.11.2. 사용자 프로필 관리

사용자 프로필 구성은 실제 기준으로 관리됩니다. 이를 위해 왼쪽 메뉴에서 CloudEvent Settings 링크를 클릭한 다음 User Profile 탭을 클릭합니다.

사용자 프로필 탭

user profile tab

특성 하위 탭에는 현재 사용자 프로필과 연결된 속성 목록이 있습니다. 기본적으로 구성은 사용자 루트 속성을 기반으로 생성되며 각 속성은 검증 및 권한 부여 측면에서 몇 가지 기본값으로 구성됩니다.

특성 그룹 하위 탭에서 특성 그룹을 관리할 수 있습니다. 특성 그룹을 사용하면 사용자가 폼을 렌더링할 때 속성의 상관 관계를 조정할 수 있습니다.An attribute group allows you to correlate attributes so that they are displayed together when rendering user facet forms.

참고

현재 속성 그룹은 렌더링 목적에만 사용되지만 나중에 연결된 속성에 대한 최상위 구성을 정의할 수도 있어야 합니다.

JSON 편집기 하위 탭에서는 잘 정의된 JSON 스키마를 사용하여 구성을 보고 편집할 수 있습니다. 다른 탭에서 변경한 내용은 이 탭에 표시된 JSON 구성에 반영됩니다.

다음 섹션에서는 특성 하위 탭에서 구성을 관리하는 방법을 알아봅니다.

5.11.3. 속성 관리

특성 하위 탭에서 사용자 프로필과 연결된 특성을 생성, 편집 및 삭제할 수 있습니다.

새 속성을 정의하고 사용자 프로필과 연결하려면 속성 목록의 오른쪽 상단에 있는 만들기 버튼을 클릭합니다.

특성 구성

user profile create attribute

특성을 구성할 때 다음 설정을 정의할 수 있습니다.

이름
특성의 이름입니다.
표시 이름
속성의 사용자에게 친숙한 이름, 주로 사용자 방향 양식을 렌더링할 때 사용됩니다. 메시지 번들에서 값을 로드할 수 있도록 국제화를 지원합니다.
특성 그룹
속성이 속하는 속성 그룹(있는 경우)입니다.
범위 시 활성화됨
특성을 동적으로 사용하도록 범위 목록을 정의할 수 있습니다. 설정하지 않으면 속성이 항상 활성화되며 사용자 프로필을 관리할 때는 사용자용 양식을 렌더링할 때에도 해당 제한 조건이 항상 적용됩니다. 그렇지 않으면 클라이언트에서 목록의 범위를 요청하는 경우에만 동일한 제약 조건이 적용됩니다.
필수 항목
필요에 따라 속성을 설정합니다. 활성화되지 않은 경우 속성은 선택 사항입니다. 그렇지 않으면 사용자 및 관리자에게 특성을 제공해야 하며, 클라이언트가 요청한 범위를 기반으로 사용자 또는 관리자에게만 필요한 속성도 수행할 수 있습니다.
권한
이 섹션에서는 사용자와 관리자에 대한 읽기 및 쓰기 권한을 정의할 수 있습니다.
검증
이 섹션에서는 특성 값을 관리할 때 수행할 검증을 정의할 수 있습니다. Red Hat Single Sign-On에서는 자체적으로 추가할 수 있는 다양한 기본 제공 검증기를 제공합니다.
주석
이 섹션에서는 주석을 속성에 연결할 수 있습니다. 주석은 렌더링을 위해 추가 메타데이터를 프런트 엔드에 전달하는 데 주로 유용합니다.
5.11.3.1. 권한 관리

Permission 섹션에서 사용자 액세스 수준을 정의할 수 있으며 관리자는 특성을 읽고 쓸 수 있습니다.

속성 권한

user profile permission

이를 위해 다음 설정을 사용할 수 있습니다.

사용자가 볼 수 있습니까?
활성화된 경우 사용자가 특성을 볼 수 있습니다. 그렇지 않으면 사용자가 속성에 액세스할 수 없습니다.
사용자가 편집할 수 있습니까?
활성화된 경우 사용자는 특성을 보고 편집할 수 있습니다. 그렇지 않으면 사용자가 속성에 쓸 수 있는 권한이 없습니다.
admin view 할 수 있습니까?
활성화된 경우 관리자는 속성을 볼 수 있습니다. 그렇지 않으면 관리자가 속성에 액세스할 수 없습니다.
관리자가 편집할 수 있습니까?
사용 가능한 경우 관리자는 특성을 보고 편집할 수 있습니다. 그렇지 않으면 관리자가 해당 속성에 쓸 수 있는 권한이 없습니다.
참고

특성을 생성할 때 속성으로 설정된 권한이 없습니다. 결과적으로 사용자 또는 관리자가 속성에 액세스할 수 없습니다. 특성을 만든 후에는 대상 대상 사용자만 속성을 볼 수 있도록 권한을 설정해야 합니다.Once you create the attribute, make sure to set the permissions accordingly to that the attribute is only visible by the target audience.

권한 부여는 특성을 관리하는 방법과 사용자를 위한 양식에서 속성을 렌더링하는 방법에 대한 직접적인 영향을 미칩니다.

예를 들어, 사용자가 속성을 볼 수 있는 것으로 표시함으로써 관리자는 관리 콘솔(사용자 API에서)을 통해 사용자를 관리할 때 속성에 액세스할 수 없습니다. 또한 사용자는 프로필을 업데이트할 때 속성을 변경할 수 없습니다. 기존 ID 저장소(federation)에서 사용자 속성을 가져오고 소스 ID 저장소 이외의 속성을 업데이트하지 않고 사용자에게 속성을 표시하도록 하는 경우 흥미로운 구성입니다.

마찬가지로, 사용자에 대한 읽기 전용 액세스 권한이 있는 관리자에게만 속성을 쓰기 가능으로 표시할 수도 있습니다. 이 경우 관리자만 특성을 관리할 수 있습니다.

개인 정보 보호 요구 사항에 따라 사용자에 대한 읽기-쓰기 권한이 있는 속성에 관리자에 액세스할 수 없게 될 수도 있습니다.

사용자 프로필 구성에 새 속성을 추가할 때마다 올바른 권한을 설정해야 합니다.

5.11.3.2. 검증 관리

유효성 검사 섹션에서 다양한 형식의 유효성 검사를 선택하여 특성 값이 특정 규칙을 준수하는지 확인할 수 있습니다.In the Validation section, you can choose from different forms of validation to make sure the attribute value conforms to specific rules.

특성 유효성 검사

user profile validation

Red Hat Single Sign-On은 즉시 다양한 검증기를 제공합니다.

이름설명설정

길이

최소 및 최대 길이에 따라 문자열 값의 길이를 확인합니다.

min: 허용되는 최소 길이를 정의하는 정수입니다.

최대 허용 길이를 정의하는 정수입니다.

Trim-disabled: 유효성 검사 전에 값을 제거할지 여부를 정의하는 부울입니다.

integer

값이 정수이고 낮은 범위 및/또는 상위 범위 내에 있는지 확인합니다. 범위를 정의하지 않으면 유효성 검사기에서 값이 유효한 숫자인지 여부만 확인합니다.

min: 더 낮은 범위를 정의하는 정수입니다.

max: 상한 범위를 정의하는 정수입니다.

double

값이 double이고 더 낮은 범위 및/또는 상위 범위 내에 있는지 확인합니다. 범위를 정의하지 않으면 유효성 검사기에서 값이 유효한 숫자인지 여부만 확인합니다.

min: 더 낮은 범위를 정의하는 정수입니다.

max: 상한 범위를 정의하는 정수입니다.

uri

값이 유효한 URI인지 확인합니다.

없음

패턴

값이 특정 RegEx 패턴과 일치하는지 확인합니다.

패턴: 값을 검증할 때 사용할 RegEx 패턴입니다.

Error-message: i18n 번들의 오류 메시지 키입니다. 설정하지 않으면 일반 메시지가 사용됩니다.

email

값에 유효한 이메일 형식이 있는지 확인합니다.

없음

local-date

영역 및/또는 사용자 로케일에 따라 값의 유효한 형식이 있는지 확인합니다.

없음

person-name-prohibited-characters

값이 스크립트 삽입과 같은 공격에 대한 추가 장벽으로 유효한 사람 이름인지 확인합니다. 유효성 검사는 사용자 이름에 일반이 아닌 문자를 차단하는 기본 RegEx 패턴을 기반으로 합니다.

Error-message: i18n 번들의 오류 메시지 키입니다. 설정하지 않으면 일반 메시지가 사용됩니다.

username-prohibited-characters

값이 스크립트 삽입과 같은 공격에 대한 추가 장벽으로 유효한 사용자 이름인지 확인합니다. 유효성 검사는 사용자 이름에서 일반적이지 않은 문자를 차단하는 기본 RegEx 패턴을 기반으로 합니다.

Error-message: i18n 번들의 오류 메시지 키입니다. 설정하지 않으면 일반 메시지가 사용됩니다.

options

값이 정의된 허용되는 값 집합에서 있는지 확인합니다. select 및 multiselect 필드를 통해 입력한 값을 확인하는 데 유용합니다.

options: 허용되는 값을 포함하는 문자열의 배열입니다.

5.11.3.2.1. 주석 관리

추가 정보를 프런트 엔드에 전달하기 위해 속성을 주석으로 장식하여 속성을 렌더링하는 방법을 지정할 수 있습니다. 이 기능은 주로 Red Hat Single Sign-On 주제를 확장하여 속성과 관련된 주석을 기반으로 페이지를 동적으로 렌더링할 때 유용합니다. 이 메커니즘은 예를 들어 속성에 대해 양식 입력 filed를 구성하는 데 사용됩니다.

특성 주석

user profile annotation

5.11.4. 특성 그룹 관리

특성 그룹 하위 탭에서 특성 그룹을 생성, 편집 및 삭제할 수 있습니다. 특성 그룹을 사용하면 사용자 쪽 양식에서 함께 렌더링되도록 관련 속성의 컨테이너를 정의할 수 있습니다.

특성 그룹 목록

user profile attribute group list

참고

속성에 바인딩된 특성 그룹을 삭제할 수 없습니다. 이를 위해 먼저 특성을 업데이트하여 바인딩을 제거해야 합니다.

새 그룹을 만들려면 속성 그룹 목록의 오른쪽 상단에 있는 만들기 버튼을 클릭합니다.

특성 그룹 구성

user profile create attribute group

그룹을 구성할 때 다음 설정을 정의할 수 있습니다.

이름
그룹의 이름입니다.
표시 이름
그룹에 대해 사용자에게 친숙한 이름으로, 주로 사용자 연결 양식을 렌더링할 때 사용됩니다. 메시지 번들에서 값을 로드할 수 있도록 국제화를 지원합니다.
설명 표시
사용자 방향 양식을 렌더링할 때 툴팁으로 표시되는 사용자에게 친숙한 텍스트입니다.
주석
이 섹션에서는 주석을 속성에 연결할 수 있습니다. 주석은 렌더링을 위해 추가 메타데이터를 프런트 엔드에 전달하는 데 주로 유용합니다.

5.11.5. JSON 구성 사용

사용자 프로필 구성은 잘 정의된 JSON 스키마를 사용하여 저장됩니다. JSON 편집기 하위 탭을 클릭하여 사용자 프로필 구성을 직접 편집하도록 선택할 수 있습니다.

JSON 설정

user profile json config

JSON 스키마는 다음과 같이 정의됩니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {
        "roles": [ "user", "admin" ],
        "scopes": [ "foo", "bar" ]
      },
      "permissions": {
        "view": [ "admin", "user" ],
        "edit": [ "admin", "user" ]
      },
      "validations": {
        "email": {},
        "length": {
          "max": 255
        }
      },
      "annotations": {
        "myannotation": "myannotation-value"
      }
    }
  ],
  "groups": [
    {
      "name": "personalInfo",
      "displayHeader": "Personal Information"
    }
  ]
}

스키마는 필요한 만큼의 속성을 지원합니다.

각 속성에 대해 필요한,권한주석 설정을 선택적으로 정의해야 합니다.

5.11.5.1. 필수 속성

required 설정은 속성이 필요한지 여부를 정의합니다. Red Hat Single Sign-On을 사용하면 다양한 조건에 따라 필요에 따라 속성을 설정할 수 있습니다.

필수 설정이 빈 오브젝트로 정의되면 항상 속성이 필요합니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {}
  ]
}

반면 사용자 또는 관리자 또는 둘 다에 필요한 속성을 설정하도록 선택할 수 있습니다. 사용자가 Red Hat Single Sign-On에서 인증할 때 특정 범위가 요청되는 경우에만 속성을 필요에 따라 표시합니다.

사용자 및/또는 관리자에게 필요한 속성을 표시하려면 다음과 같이 roles 속성을 설정합니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {
        "roles": ["user"]
      }
  ]
}

roles 속성에는 각각 사용자 또는 관리자에게 속성이 필요한지 여부에 따라 값이 사용자 또는 admin 일 수 있는 배열이 필요합니다.

마찬가지로 사용자를 인증할 때 클라이언트가 하나 이상의 범위를 요청할 때 필요한 속성을 만들 수 있습니다. 다음과 같이 scopes 속성을 사용할 수 있습니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "required": {
        "scopes": ["foo"]
      }
  ]
}

scopes 속성은 클라이언트 범위를 나타내는 모든 문자열 값이 될 수 있는 배열입니다.

5.11.5.2. permissions 속성

특성 수준 권한 속성을 사용하여 속성에 대한 읽기 및 쓰기 권한을 정의할 수 있습니다. 권한은 사용자 또는 관리자의 특성 또는 둘 다에서 이러한 작업을 수행할 수 있는지 여부에 따라 설정됩니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "permissions": {
        "view": ["admin"],
        "edit": ["user"]
      }
  ]
}

보기편집 속성은 각각 속성을 볼 수 있는지 또는 관리자가 속성을 편집할 수 있는지에 따라 사용자 또는 관리자 의 값이 사용자 또는 관리자 중 하나일 수 있는 배열을 예상합니다.

편집 권한이 부여되면 권한이 암시적으로 부여됩니다.

5.11.5.3. annotations 속성

attribute-level 주석 속성을 사용하여 추가 메타데이터를 속성에 연결할 수 있습니다. 주석은 사용자 프로필 구성을 기반으로 특성을 프론트엔드에 렌더링하는 사용자 속성에 대한 추가 정보를 전달하는 데 주로 유용합니다. 각 주석은 키/값 쌍입니다.

{
  "attributes": [
    {
      "name": "myattribute",
      "annotations": {
        "foo": ["foo-value"],
        "bar": ["bar-value"]
      }
  ]
}

5.11.6. 동적 양식 사용

User Profile의 주요 기능 중 하나는 속성 메타데이터에 따라 사용자용 양식을 동적으로 렌더링할 수 있다는 점입니다. 영역에 기능이 활성화되면 등록 및 업데이트 프로필과 같은 양식이 특정 topic 템플릿을 사용하여 렌더링되어 사용자 프로필 구성을 기반으로 페이지를 동적으로 렌더링합니다.

즉, 기본 렌더링 메커니즘이 요구 사항에 적합한 경우 템플릿을 전혀 사용자 지정할 필요가 없습니다. 여전히 이러한 문제에 대한 사용자 지정이 필요한 경우 다음을 확인해야 하는 템플릿은 다음과 같습니다.

템플릿설명

base/login/update-user-profile.ftl

업데이트 프로필 페이지를 렌더링하는 템플릿입니다.

base/login/register-user-profile.ftl

등록 페이지를 렌더링하는 템플릿입니다.

base/login/idp-review-user-profile.ftl

브로커를 통해 사용자를 페더링할 때 사용자 프로필을 검토/업데이트하기 위해 페이지를 렌더링하는 템플릿입니다.

base/login/user-profile-commons.ftl

특성 구성에 따라 입력 필드를 양식으로 렌더링하는 템플릿입니다. 위에서 설명한 세 페이지 템플릿 모두에서 사용됩니다. 여기에서 새로운 입력 유형을 구현할 수 있습니다.

기본 렌더링 메커니즘은 다음과 같은 기능을 제공합니다.

  • 속성으로 설정된 권한에 따라 필드를 동적으로 표시합니다.
  • 속성으로 설정된 제약 조건에 따라 필수 필드의 마커를 동적으로 렌더링합니다.
  • 동적으로 필드 입력 유형(텍스트, 날짜, 번호, 선택, 다중 선택)을 속성으로 설정합니다.
  • 속성으로 설정된 권한에 따라 읽기 전용 필드를 동적으로 렌더링합니다.
  • 속성으로 설정된 순서에 따라 필드의 순서를 동적으로 정렬합니다.
  • 동일한 특성 그룹에 속하는 필드를 동적으로 그룹화합니다.
5.11.6.1. 순서 지정 속성

특성 목록 페이지에서 위쪽 및 아래쪽 화살표를 클릭하여 속성 순서를 설정합니다.

속성 순서 지정

user profile attribute list order

이 페이지에서 설정한 순서는 필드가 동적 형식으로 렌더링될 때 적용됩니다.

5.11.6.2. 특성 그룹화

동적 양식이 렌더링되면 동일한 특성 그룹에 속하는 속성을 그룹화하려고 합니다.

동적 업데이트 프로필 양식

user profile update profile

참고

특성이 특성 그룹에 연결되어 있는 경우 동일한 그룹 내의 속성이 동일한 그룹 헤더 내에서 함께 닫히도록 속성 순서도 중요합니다. 그렇지 않으면 그룹 내의 속성이 순차적 순서에 없는 경우 동일한 그룹 헤더가 동적 형식으로 여러 번 렌더링될 수 있습니다.

5.11.6.3. 속성에 대해 제출된 양식 입력 구성

Red Hat Single Sign-On은 동적 양식 및 시각화의 속성에 사용할 입력 유형을 구성하는 기본 주석을 제공합니다.

사용 가능한 주석은 다음과 같습니다.

이름설명

inputType

형식 입력 필드의 유형입니다. 사용 가능한 유형은 아래 표에 설명되어 있습니다.

inputHelperTextBefore

입력 필드 이전에 렌더링된 도우미 텍스트입니다. 여기에서 직접 텍스트 또는 국제화 패턴(예: ${i18n.key})을 사용할 수 있습니다. 텍스트가 페이지에 렌더링될 때 html 이스케이프되지 않으므로 여기에 HTML 태그를 사용하여 텍스트를 포맷할 수 있지만 html 제어 문자도 올바르게 이스케이프해야 합니다.

inputHelperTextAfter

입력 필드 이후에 도움말 텍스트가 렌더링되었습니다. 여기에서 직접 텍스트 또는 국제화 패턴(예: ${i18n.key})을 사용할 수 있습니다. 텍스트가 페이지에 렌더링될 때 html 이스케이프되지 않으므로 여기에 HTML 태그를 사용하여 텍스트를 포맷할 수 있지만 html 제어 문자도 올바르게 이스케이프해야 합니다.

inputOptionsFromValidation

select 및 multiselect 유형의 주석입니다. 사용자 정의 속성 검증의 선택적 이름으로 부터 입력 옵션을 가져옵니다. 자세한 설명은 아래를 참조하십시오.

inputOptionLabelsI18nPrefix

select 및 multiselect 유형의 주석입니다. UI에서 옵션을 렌더링하는 국제화 키 접두사입니다. 자세한 설명은 아래를 참조하십시오.

inputOptionLabels

select 및 multiselect 유형의 주석입니다. 옵션에 대한 UI 레이블을 정의하는 선택적 맵입니다(직접 또는 국제화 사용). 자세한 설명은 아래를 참조하십시오.

inputTypePlaceholder

필드에 적용되는 HTML 입력 자리 표시자 특성 - 입력 필드의 예상 값(예: 샘플 값 또는 예상 형식의 짧은 설명)을 설명하는 짧은 힌트를 지정합니다. 사용자가 값을 입력하기 전에 입력 필드에 짧은 힌트가 표시됩니다.

inputTypeSize

필드에 적용되는 HTML 입력 크기 특성 - 단일 줄 입력 필드의 너비를 문자 단위로 지정합니다. HTML 선택 유형을 기반으로 하는 필드의 경우 표시된 옵션이 있는 행 수를 지정합니다. 사용 된 주제의 css에 따라 작동하지 않을 수 있습니다!

inputTypeCols

필드에 적용되는 HTML 입력 cols 특성 - textarea 유형의 너비를 문자 단위로 지정합니다. 사용 된 주제의 css에 따라 작동하지 않을 수 있습니다!

inputTypeRows

필드에 적용되는 HTML 입력 특성 - 텍스트 영역 유형에 대한 높이를 지정합니다. 선택 필드의 경우 옵션이 표시된 행 수를 지정합니다. 사용 된 주제의 css에 따라 작동하지 않을 수 있습니다!

inputTypePattern

클라이언트 측 검증을 제공하는 필드에 적용되는 HTML 입력 패턴 특성 - 입력 필드의 값을 확인하는 정규식을 지정합니다. 단일 줄 입력에 유용합니다.

inputTypeMaxLength

필드에 적용된 HTML 입력 maxlength 속성 - 입력 필드에 입력할 수 있는 텍스트의 최대 길이인 클라이언트 측 유효성 검사를 제공합니다. 텍스트 필드에 유용합니다.

inputTypeMinLength

필드에 적용된 HTML 입력 minlength 속성 - 입력 필드에 입력할 수 있는 텍스트의 최소 길이인 클라이언트 측 유효성 검사를 제공합니다. 텍스트 필드에 유용합니다.

inputTypeMax

필드에 적용된 HTML 입력 max 속성은 입력 필드에 입력할 수 있는 클라이언트 측 검증 - 최대 값을 제공합니다. 숫자 필드에 유용합니다.

inputTypeMin

필드에 적용된 HTML 입력 min 속성 - 입력 필드에 입력할 수 있는 클라이언트 측 유효성 검사를 제공하는 최소 값입니다. 숫자 필드에 유용합니다.

inputTypeStep

필드에 적용되는 HTML 입력 단계 특성 - 입력 필드에서 적법한 숫자 간의 간격을 지정합니다. 숫자 필드에 유용합니다.

참고

필드 유형에서는 HTML 양식 필드 태그와 적용되는 속성을 사용합니다. HTML 사양과 브라우저 지원에 따라 작동합니다.

또한 비주얼 렌더링은 사용된me에 적용된 css style에 따라 달라집니다.

사용 가능한 inputType 주석 값:

이름설명사용된 HTML 태그

text

단일 줄 텍스트 입력.

input

textarea

여러 줄 텍스트 입력.

textarea

선택 사항

공통 단일 선택 입력. 아래 옵션을 구성하는 방법을 설명합니다.

선택 사항

Select-radiobuttons

라디오 버튼 그룹을 통해 단일 선택 입력. 아래 옵션을 구성하는 방법을 설명합니다.

입력 그룹

MultiSelect

일반적인 다중 선택 입력입니다. 아래 옵션을 구성하는 방법을 설명합니다.

선택 사항

multiselect-checkboxes

확인란 그룹을 통해 입력을 선택합니다. 아래 옵션을 구성하는 방법을 설명합니다.

입력 그룹

html5-email

HTML 5 사양을 기반으로 한 이메일 주소에 대한 단일 줄 텍스트 입력.

input

html5-tel

HTML 5 사양을 기반으로 전화 번호에 대한 단일 줄 텍스트 입력.

input

html5-url

HTML 5 사양을 기반으로 하는 URL에 대한 단일 줄 텍스트 입력.

input

html5-number

HTML 5 사양에 따라 숫자( 단계별정수 또는 부동 소수점)에 대한 단일 줄 입력입니다.

input

html5-range

HTML 5 사양을 기반으로 입력한 숫자의 축소입니다.

input

html5-datetime-local

HTML 5 사양을 기반으로 하는 날짜 시간 입력.

input

html5-date

HTML 5 사양을 기반으로 하는 날짜 입력입니다.

input

html5-month

HTML 5 사양을 기반으로 한 월 입력입니다.

input

html5-week

HTML 5 사양을 기반으로 하는 주 입력.

input

html5-time

HTML 5 사양을 기반으로 하는 시간 입력.

input

5.11.6.3.1. select 및 multiselect 필드에 대한 옵션 정의

select 및 multiselect 필드에 대한 옵션은 유효성 검사에서 가져와 검증에 적용되어 UI에 제공된 필드 옵션이 항상 일관되게 유지되도록 합니다. 기본적으로 옵션은 기본 제공 옵션 검증에서 가져옵니다.

select 및 multiselect 옵션에 대해 다양한 방법으로 사람이 읽을 수 있는 레이블을 제공할 수 있습니다. 가장 간단한 경우는 특성 값이 UI 레이블과 같은 경우입니다. 이 경우에는 추가 구성이 필요하지 않습니다.

UI 라벨과 동일한 옵션 값

user profile select options simple

특성 값이 UI에 적합하지 않은 경우 inputOptionLabelsI18nPrefix 주석에서 제공하는 간단한 국제화 지원을 사용할 수 있습니다. 국제화 키의 접두사를 정의합니다. 옵션 값은 이 접두사에 추가되는 점입니다.

i18n 키 접두사를 사용한 UI 라벨에 대한 간단한 국제화

user profile select options simple i18n

옵션 값에 대한 로컬화된 UI 레이블 텍스트는 공통 로컬화 메커니즘을 사용하여 userprofile.jobtitle.swenguserprofile.jobtitle.swarch 키를 통해 제공해야 합니다.

또한 inputOptionLabels 주석을 사용하여 개별 옵션에 대한 라벨을 제공할 수도 있습니다. 여기에는 옵션에 대한 레이블 맵이 포함되어 있습니다. 맵의 key는 옵션 값(Validation에서 정의됨)이며 맵의 값은 UI 라벨 텍스트 자체이거나 해당 옵션에 대한 국제화 패턴(예: ${i18n.key})입니다.

참고

User Profile JSON 편집기 를 사용하여 map을 inputOptionLabels 주석 값으로 입력해야 합니다.

국제화가 없는 개별 옵션에 대해 직접 입력한 레이블의 예는 다음과 같습니다.

"attributes": [
...
{
  "name": "jobTitle",
  "validations": {
    "options": {
      "options":[
        "sweng",
        "swarch"
      ]
    }
  },
  "annotations": {
    "inputType": "select",
    "inputOptionLabels": {
      "sweng": "Software Engineer",
      "swarch": "Software Architect"
    }
  }
}
...
]

개별 옵션에 대한 국제화된 레이블의 예:

"attributes": [
...
{
  "name": "jobTitle",
  "validations": {
    "options": {
      "options":[
        "sweng",
        "swarch"
      ]
    }
  },
  "annotations": {
    "inputType": "select-radiobuttons",
    "inputOptionLabels": {
      "sweng": "${jobtitle.swengineer}",
      "swarch": "${jobtitle.swarchitect}"
    }
  }
}
...
]

지역화된 텍스트를 Jobtitle.swovn 및 jobtitle.sw architect 키를 통해 제공한 다음 공통 현지화 메커니즘을 사용해야 합니다.

사용자 정의 검증기를 사용하면 inputOptionsFromValidation 속성 주석으로 옵션을 제공할 수 있습니다. 이 검증에는 다양한 옵션을 제공하는 옵션 config가 있어야 합니다. 국제화는 기본 제공 옵션 검증에서 제공하는 옵션과 동일한 방식으로 작동합니다.

사용자 정의 검증기에서 제공하는 옵션

user profile select options custom validator

5.11.7. 사용자 프로필 규정 준수 강제 적용

사용자 프로필이 구성을 준수하도록 하려면 관리자는 VerifyProfile 필수 조치를 사용하여 결국 사용자가 Red Hat Single Sign-On에 인증할 때 프로필을 업데이트하도록 할 수 있습니다.

참고

VerifyProfile 작업은 UpdateProfile 작업과 유사합니다. 그러나 사용자 프로필에서 제공하는 모든 기능을 활용하여 사용자 프로필 구성의 준수를 자동으로 시행합니다.

활성화되면 사용자가 인증할 때 VerifyProfile 작업이 다음 단계를 수행합니다.

  • 사용자 프로필이 영역으로 설정된 사용자 프로필 구성을 완전히 준수하는지 확인합니다.
  • 그렇지 않은 경우 인증 중에 추가 단계를 수행하여 사용자가 누락되거나 유효하지 않은 속성을 업데이트할 수 있습니다.
  • 사용자 프로필이 구성과 호환되는 경우 추가 단계가 수행되지 않으며 사용자는 인증 프로세스를 계속합니다.

기본적으로 VerifyProfile 작업이 비활성화됩니다. 활성화하려면 왼쪽 메뉴에서 Authentication 링크를 클릭한 다음 Required Actions 탭을 클릭합니다. 이 탭에서 Register 버튼을 클릭하고 VerifyProfile 작업을 선택합니다.

VerifyProfile 필수 작업 등록

user profile register verify profile action

5.11.8. 사용자 프로필로 마이그레이션

영역에 User Profile 기능을 활성화하기 전에 알아야 할 몇 가지 중요한 고려 사항이 있습니다. 특성 메타데이터를 관리할 수 있는 단일 환경을 제공하므로 이 기능은 사용자에게 설정할 수 있는 속성과 관리 방법에 대해 매우 엄격한 기능입니다.

사용자 관리 측면에서 관리자는 사용자 프로필 구성에 정의된 속성만 관리할 수 있습니다. 사용자로 설정하고 사용자 프로필 구성에 아직 정의되어 있지 않은 다른 속성에는 액세스할 수 없습니다. 사용자 또는 관리자에게 노출하려는 모든 사용자 속성으로 사용자 프로필 구성을 업데이트하는 것이 좋습니다.

사용자 정보를 쿼리하기 위해 User REST API에 액세스하는 사용자에게 동일한 권장 사항이 적용됩니다.

해당 속성에 액세스하려면 LDAP_ID,LDAP_ENTRY_DN, KERBEROS_PRINCIPAL 과 같은 Red Hat Single Sign-On 내부 사용자 속성에 대한 속성을 액세스할 수 있습니다. 관리 콘솔을 통해 사용자 속성을 관리하거나 사용자 API를 통해 사용자를 쿼리할 때 이러한 속성을 관리자에게만 볼 수 있도록 이러한 속성을 관리자에게만 표시하는 것이 좋습니다.

파일과 관련하여 기존 템플릿(사용자 루트 속성을 사용하여 하드 코딩됨)에 대한 사용자 지정이 이미 있는 경우 사용자 쪽 양식을 렌더링하지만 이러한 양식을 동적으로 렌더링하는 새 템플릿을 사용하지 않습니다. 이상적으로 템플릿에 사용자 정의를 사용하지 말고 이러한 새 템플릿에서 제공하는 동작을 계속하여 양식을 동적으로 렌더링하는 것이 좋습니다. 요구 사항을 해결하기에 아직 충분하지 않은 경우 새 템플릿을 개선하는 것이 적합한지 여부를 논의할 수 있도록 사용자 지정하거나 피드백을 제공할 수 있습니다.

5.12. Red Hat Single Sign-On에서 수집한 개인 데이터

기본적으로 Red Hat Single Sign-On은 다음 데이터를 수집합니다.

  • 사용자 이메일, 이름, 성과 같은 기본 사용자 프로필 데이터
  • 소셜 계정에 사용되는 기본 사용자 프로필 데이터 및 소셜 로그인을 사용할 때 소셜 계정에 대한 참조입니다.
  • IP 주소, 운영 체제 이름, 브라우저 이름과 같은 감사 및 보안 목적으로 수집된 장치 정보입니다.

Red Hat Single Sign-On에서 수집한 정보는 사용자 정의가 매우 높습니다. 다음 지침은 사용자 지정 작업을 수행할 때 적용됩니다.

  • 등록 및 계정 양식에는 오션, 성, 성과 같은 사용자 정의 필드가 포함될 수 있습니다. 관리자는 소셜 공급자 또는 LDAP와 같은 사용자 스토리지 공급자에서 데이터를 검색하도록 Red Hat Single Sign-On을 구성할 수 있습니다.
  • Red Hat Single Sign-On은 암호, OTP 코드 및 WebAuthn 공개 키와 같은 사용자 자격 증명을 수집합니다. 이 정보는 암호화되어 데이터베이스에 저장되므로 Red Hat Single Sign-On 관리자에게는 표시되지 않습니다. 각 인증 정보 유형에는 암호를 해시하는 데 사용되는 알고리즘과 암호를 해시하는 데 사용되는 해시 반복 수와 같이 관리자에게 표시되는 기밀 메타데이터가 포함될 수 있습니다.
  • 권한 부여 서비스 및 UMA 지원을 활성화하면 Red Hat Single Sign-On은 특정 사용자가 소유자인 일부 오브젝트에 대한 정보를 보유할 수 있습니다.

6장. 사용자 세션 관리

사용자가 영역에 로그인하면 Red Hat Single Sign-On은 각 사용자에 대한 사용자 세션을 유지 관리하고 세션 내에서 사용자가 방문한 각 클라이언트를 기억합니다. 영역 관리자는 각 사용자 세션에 대해 여러 작업을 수행할 수 있습니다.

  • 영역에 대한 로그인 통계를 봅니다.
  • 활성 사용자 및 사용자가 로그인한 위치를 확인합니다.
  • 세션에서 사용자를 로그아웃합니다.
  • 토큰을 취소합니다.
  • 토큰 타임아웃을 설정합니다.
  • 세션 시간 초과를 설정합니다.

6.1. 세션

Red Hat Single Sign-On에서 활성 클라이언트 및 세션에 대한 최상위 보기를 보려면 메뉴에서 세션을 클릭합니다.

세션

Sessions

6.1.1. 로그아웃 모든 작업

Logout all 버튼을 클릭하여 영역의 모든 사용자를 로그아웃 할 수 있습니다.

Logout all 버튼을 클릭하면 모든 SSO 쿠키가 유효하지 않게 되고 활성 브라우저 세션 내에서 인증을 요청하는 클라이언트는 다시 로그인해야 합니다. Red Hat Single Sign-On은 로그아웃 이벤트의 Red Hat Single Sign-On OIDC 클라이언트 어댑터를 사용하여 클라이언트에 알립니다. SAML과 같은 클라이언트 유형은 백 채널 로그 아웃 요청을 수신하지 않습니다.

참고

Logout all 을 클릭하면 미결 토큰이 취소되지 않습니다. 뛰어난 토큰은 의도적으로 만료되어야 합니다. Red Hat Single Sign-On OIDC 클라이언트 어댑터를 사용하는 클라이언트의 경우 해지 정책을 내보내 토큰을 취소할 수 있지만 다른 어댑터에서는 작동하지 않습니다.

6.1.2. 애플리케이션 탐색

세션 페이지에서 각 클라이언트를 클릭하여 해당 클라이언트의 세션 탭으로 이동할 수 있습니다. 애플리케이션에 있는 사용자를 보려면 세션 표시 버튼을 클릭합니다.

애플리케이션 세션

application sessions

6.1.3. 사용자 탐색

개별 사용자의 세션 탭으로 이동하면 사용자의 세션 정보를 볼 수도 있습니다.

사용자 세션

user sessions

6.2. 취소 정책

시스템이 손상된 경우 세션 화면 취소 탭을 클릭하여 모든 활성 세션 및 액세스 토큰 취소할 수 있습니다.

Revocation

revocation

이 콘솔을 사용하여 해당 시간 및 날짜 이전에 발행된 세션 또는 토큰이 유효하지 않은 시간과 날짜를 지정할 수 있습니다. 정책을 현재 시간과 날짜로 설정하려면 Set to now 를 클릭합니다. 내보내기를 클릭하여 Red Hat Single Sign-On OIDC 클라이언트 어댑터가 있는 등록된 OIDC 클라이언트에 이 취소 정책을 푸시합니다.

6.3. 세션 및 토큰 타임아웃

Red Hat Single Sign-On에는 VMDK 설정 메뉴의 토큰 탭을 통해 세션, 쿠키 및 토큰 시간 초과가 포함됩니다.

토큰 탭

tokens tab

설정설명

기본 서명 알고리즘

영역에 토큰을 할당하는 데 사용되는 기본 알고리즘입니다.

새로 고침 토큰 취소

ON (켜짐)인 경우 Red Hat Single Sign-On은 새로 고침 토큰을 취소하고 클라이언트가 사용해야 하는 다른 토큰을 발행합니다. 이 작업은 새로 고침 토큰 흐름을 수행하는 OIDC 클라이언트에 적용됩니다.

SSO 세션 ID

이 설정은 OIDC 고객에게만 적용됩니다. 사용자가 이 시간 초과보다 오래 비활성 경우 사용자 세션이 무효화됩니다. 이 시간 초과 값은 클라이언트가 인증을 요청하거나 새로 고침 토큰 요청을 보낼 때 재설정됩니다. Red Hat Single Sign-On은 세션 무효화를 적용하기 전에 유휴 타임아웃에 시간을 추가합니다. 이 섹션의 뒷부분에 나오는 참고 사항을 참조하십시오.

SSO 세션 최대

사용자 세션이 만료되기 전의 최대 시간입니다.

SSO 세션 ID를 기억할 수 있습니다.

이 설정은 표준 SSO 세션 Idle 구성과 유사하지만 Remember Me enabled를 사용한 로그인과 관련이 있습니다. 사용자는 로그인할 때 Remember Me 를 클릭하면 세션 유휴 타임아웃을 더 긴 세션 유휴 상태로 설정할 수 있습니다. 이 설정은 선택적 구성이며 해당 값이 0보다 크면 SSO 세션 Idle 구성과 동일한 유휴 타임아웃을 사용합니다.

SSO 세션 최대 메모리

이 설정은 표준 SSO 세션 최대값과 유사하지만 내 로그인을 기억하는 것과 관련이 있습니다. 사용자는 로그인할 때 Remember Me 를 클릭하면 더 긴 세션을 지정할 수 있습니다. 이 설정은 선택적 구성이며 해당 값이 0보다 크면 SSO 세션 최대값 구성과 동일한 세션 수명을 사용합니다.

오프라인 세션 ID

이 설정은 오프라인 액세스 를 위한 것입니다. Red Hat Single Sign-On이 오프라인 토큰을 취소하기 전에 세션이 유휴 상태로 유지되는 시간입니다. Red Hat Single Sign-On은 세션 무효화를 적용하기 전에 유휴 타임아웃에 시간을 추가합니다. 이 섹션의 뒷부분에 나오는 참고 사항을 참조하십시오.

오프라인 세션 최대 제한

이 설정은 오프라인 액세스 를 위한 것입니다. 이 플래그가 ON 이면 offline Session Max는 사용자 활동에 관계없이 오프라인 토큰이 활성 상태로 유지되는 최대 시간을 제어할 수 있습니다. 플래그가 OFF 이면 오프라인 세션은 lifespan에 의해 만료되지 않습니다. 이 세션은 유휴 상태일 때만 만료됩니다. 이 옵션이 활성화되면 오프라인 세션 최대 ( 영역 수준에서 글로벌 옵션) 및 클라이언트 오프라인 세션 최대 ( 고급 설정 탭의 특정 클라이언트 수준 옵션)를 구성할 수 있습니다.

오프라인 세션 최대

이 설정은 오프라인 액세스 를 위한 것이며 Red Hat Single Sign-On이 해당 오프라인 토큰을 취소하기 전 최대 시간입니다. 이 옵션은 사용자 활동에 관계없이 오프라인 토큰이 활성 상태로 유지되는 최대 시간을 제어합니다.

클라이언트 오프라인 세션 ID

이 설정은 오프라인 액세스 를 위한 것입니다. 사용자가 이 시간 초과보다 오래 비활성 경우 오프라인 토큰 요청이 유휴 타임아웃을 충돌합니다. 이 설정은 오프라인 세션 유휴 상태보다 오프라인 토큰의 더 짧은 유휴 타임아웃을 지정합니다. 사용자는 개별 클라이언트에 대해 이 설정을 덮어쓸 수 있습니다. 이 설정은 선택적 구성이며 0으로 설정하면 오프라인 세션 Idle 구성에서 동일한 유휴 타임아웃을 사용합니다.

클라이언트 오프라인 세션 최대

이 설정은 오프라인 액세스 를 위한 것입니다. 오프라인 토큰이 만료되고 무효화되기 전 최대 시간입니다. 이 설정은 오프라인 세션 시간 초과보다 짧은 토큰 타임아웃을 지정하지만 사용자는 개별 클라이언트에 대해 이를 재정의할 수 있습니다. 이 설정은 선택적 구성이며 0으로 설정하면 오프라인 세션 최대 구성에서 동일한 유휴 타임아웃을 사용합니다.

클라이언트 세션 ID

클라이언트 세션에 대한 유휴 시간 제한입니다. 사용자가 이 시간 초과보다 오래 동안 비활성 상태인 경우 클라이언트 세션이 무효화되고 새로 고침 토큰 요청에서 유휴 시간 초과가 발생합니다. 이 설정은 고유한 일반 SSO 사용자 세션에는 영향을 미치지 않습니다. SSO 사용자 세션은 0개 이상의 클라이언트 세션의 상위 세션임을 확인합니다. 사용자가 로그인한 각 클라이언트 앱에 대해 하나의 클라이언트 세션이 생성됩니다. 이 값은 SSO 세션 ID 보다 짧은 유휴 시간 초과를 지정해야 합니다. 고급 설정 클라이언트 탭에서 개별 클라이언트에 대해 사용자가 재정의할 수 있습니다. 이 설정은 선택적 구성이며 0으로 설정하면 SSO 세션 Idle 구성에서 동일한 유휴 타임아웃을 사용합니다.

클라이언트 세션 최대

클라이언트 세션 및 새로 고침 토큰이 만료되기 전의 최대 시간입니다. 이전 옵션과 마찬가지로 이 설정은 SSO 사용자 세션에 영향을 미치지 않으며 SSO 세션 최대값보다 짧은 값을 지정해야 합니다. 고급 설정 클라이언트 탭에서 개별 클라이언트에 대해 사용자가 재정의할 수 있습니다. 이 설정은 선택적 구성이며 0으로 설정하면 SSO 세션 최대 구성에서 동일한 최대 시간 초과를 사용합니다.

액세스 토큰 수명

Red Hat Single Sign-On이 OIDC 액세스 토큰을 생성하면 이 값은 토큰의 수명을 제어합니다.

Implicit Flow를 위한 액세스 토큰 수명

Implicit Flow를 사용하면 Red Hat Single Sign-On에서 새로 고침 토큰을 제공하지 않습니다. Implicit Flow에서 생성한 액세스 토큰에 대해 별도의 제한 시간이 있습니다.

클라이언트 로그인 시간 초과

클라이언트가 OIDC에서 인증 코드 흐름을 완료해야 하는 최대 시간입니다.

login timeout

로그인해야 하는 총 시간입니다. 인증이 이 시간보다 오래 걸리는 경우 사용자는 인증 프로세스를 다시 시작해야 합니다.

로그인 작업 타임아웃

최대 시간은 사용자가 인증 프로세스 중 하나의 페이지에 보낼 수 있습니다.

사용자 시작 동작 수명 (User-Initiated Action Lifespan)

사용자의 작업 권한이 만료되기 전의 최대 시간입니다. 일반적으로 사용자가 자체 생성된 작업에 신속하게 대응하므로 이 값을 짧게 유지합니다.

Default Admin-Initiated Action Lifespan

관리자가 사용자에게 보내는 작업 권한이 만료되기 전 최대 시간입니다. 관리자가 이메일을 오프라인 사용자에게 보낼 수 있도록 이 값을 길게 유지합니다. 관리자는 토큰을 실행하기 전에 기본 시간 초과를 덮어쓸 수 있습니다.

사용자 시작 작업 수명 재정의

개별 작업별로 독립 시간 초과를 지정합니다(예: 이메일 확인, 암호, 사용자 작업 및 ID 공급자 확인). 이 값은 기본적으로 User-Initiated Action Lifespan 에 구성된 값으로 설정됩니다.

참고

유휴 상태의 타임아웃의 경우 세션이 활성화되는 2 분의 시간이 있습니다. 예를 들어 시간 초과를 30분으로 설정하면 세션이 만료되기까지 32분입니다.

이 작업은 클러스터의 일부 시나리오와 토큰이 만료되기 전에 한 클러스터 노드에서 잠시 새로 고침되고 다른 클러스터 노드는 새로 고침 노드에서 성공적인 새로 고침에 대한 메시지를 아직 수신하지 못했기 때문에 세션을 만료로 잘못 간주하는 경우 필요합니다.

6.4. 오프라인 액세스

오프라인 액세스 로그인 중에 클라이언트 애플리케이션은 새로 고침 토큰 대신 오프라인 토큰을 요청합니다. 클라이언트 애플리케이션은 이 오프라인 토큰을 저장하고 사용자가 로그아웃하는 경우 나중에 로그인할 때 사용할 수 있습니다. 이 작업은 사용자가 온라인 상태가 아닌 경우에도 애플리케이션이 사용자를 대신하여 오프라인 작업을 수행해야 하는 경우에 유용합니다. 예를 들어 일반 데이터 백업입니다.

클라이언트 애플리케이션은 오프라인 토큰을 스토리지에 보관한 다음 이를 사용하여 Red Hat Single Sign-On 서버에서 새 액세스 토큰을 검색할 책임이 있습니다.

새로 고침 토큰과 오프라인 토큰의 차이점은 오프라인 토큰이 만료되지 않으며 SSO 세션 Idle 타임아웃 및 SSO 세션 최대 수명의 영향을 받지 않는다는 것입니다. 오프라인 토큰은 사용자 로그아웃 또는 서버를 다시 시작한 후 유효합니다. 새로 고침 토큰 동작에 대해 30일 또는 오프라인 세션 Idle 값에 대해 오프라인 토큰 작업을 사용해야 합니다.

오프라인 세션 Max Limited 를 활성화하면 새로 고침 토큰 작업에 오프라인 토큰을 사용하는 경우에도 오프라인 토큰은 60일 후에 만료됩니다. Admin Console에서 이 값을 오프라인 세션 최대로 변경할 수 있습니다.

오프라인 액세스를 사용하는 경우 클라이언트 유휴 및 최대 시간 초과를 클라이언트 수준에서 재정의할 수 있습니다. 클라이언트 고급 설정 탭에서 클라이언트 오프라인 세션 ID 및 클라이언트 오프라인 세션 최대 옵션을 사용하면 특정 애플리케이션에 대한 오프라인 시간 초과가 더 짧아질 수 있습니다. 클라이언트 세션 값도 새로 고침 토큰 만료를 제어하지만 전역 오프라인 사용자 SSO 세션에는 영향을 미치지 않습니다. 클라이언트 오프라인 세션 최대 옵션은 영역 수준에서 오프라인 세션 Max Limited활성화된 경우에만 클라이언트에서 평가됩니다.

Revoke Refresh Token 옵션을 활성화하면 각 오프라인 토큰을 한 번만 사용할 수 있습니다. 새로 고침 후 이전 버전 대신 새로 고침 응답에서 새 오프라인 토큰을 저장해야 합니다.

사용자는 Red Hat Single Sign-On에서 사용자 계정 콘솔에서 부여하는 오프라인 토큰을 보고 취소할 수 있습니다. 관리자는 Consents 탭의 Admin Console에서 개별 사용자의 오프라인 토큰을 취소할 수 있습니다. 관리자는 각 클라이언트의 오프라인 액세스 탭에서 발행된 모든 오프라인 토큰을 볼 수 있습니다. 관리자는 취소 정책을 설정하여 오프라인 토큰을 취소할 수 있습니다.

오프라인 토큰을 발행하려면 사용자에게 realm-level offline_access 역할에 대한 역할 매핑이 있어야 합니다. 또한 클라이언트는 해당 범위에서 해당 역할을 수행해야 합니다. 클라이언트는 기본적으로 오프라인_access 클라이언트 범위를 역할에 선택적 클라이언트 범위로 추가해야 합니다.

클라이언트는 권한 부여 요청을 Red Hat Single Sign-On으로 보낼 때 매개 변수 scope=offline_access 를 추가하여 오프라인 토큰을 요청할 수 있습니다. Red Hat Single Sign-On OIDC 클라이언트 어댑터는 애플리케이션 보안 URL(예: http://localhost:8080/customer-portal/secured?scope=offline_access)에 액세스하는 데 사용할 때 이 매개변수를 자동으로 추가합니다. 인증 요청 본문에 scope=offline_access 를 포함하는 경우 직접 액세스 권한 부여 및 서비스 계정에서 오프라인 토큰을 지원합니다.

6.5. 오프라인 세션 사전 로드

Infinispan 캐시 외에도 오프라인 세션은 데이터베이스에 저장되므로 서버를 다시 시작한 후에도 사용할 수 있습니다. 기본적으로 오프라인 세션은 서버 시작 중에 데이터베이스에서 Infinispan 캐시로 사전 로드되지 않습니다. 이 방법은 사전 로드해야 하는 오프라인 세션이 많이 있는 경우 단점이 있기 때문입니다. 서버 시작 시간을 크게 저하시킬 수 있습니다. 따라서 오프라인 세션은 기본적으로 데이터베이스에서 실수로 가져옵니다.

그러나 Red Hat Single Sign-On은 서버를 시작하는 동안 데이터베이스에서 Infinispan 캐시로 오프라인 세션을 사전 로드하도록 구성할 수 있습니다. userSessions SPI에서 preloadOfflineSessionsFromDatabase 속성을 true 로 설정하여 수행할 수 있습니다.

다음 예에서는 오프라인 세션 사전 로드를 구성하는 방법을 보여줍니다.

<subsystem xmlns="urn:jboss:domain:keycloak-server:1.2">
    ...
    <spi name="userSessions">
        <default-provider>infinispan</default-provider>
        <provider name="infinispan" enabled="true">
            <properties>
                <property name="preloadOfflineSessionsFromDatabase" value="true"/>
            </properties>
        </provider>
    </spi>
    ...
</subsystem>

CLI 명령을 사용하는 동등한 구성:

/subsystem=keycloak-server/spi=userSessions:add(default-provider=infinispan)
/subsystem=keycloak-server/spi=userSessions/provider=infinispan:add(properties={preloadOfflineSessionsFromDatabase => "true"},enabled=true)

6.6. 일시적인 세션

Red Hat Single Sign-On에서 임시 세션을 수행할 수 있습니다. 일시적인 세션을 사용하는 경우 Red Hat Single Sign-On은 인증에 성공한 후 사용자 세션을 생성하지 않습니다. Red Hat Single Sign-On은 사용자를 성공적으로 인증하는 현재 요청의 범위에 대한 임시 세션을 생성합니다. Red Hat Single Sign-On은 인증 후 일시적인 세션을 사용하여 프로토콜 매퍼 를 실행할 수 있습니다.

일시적인 세션 동안 클라이언트 애플리케이션은 토큰을 새로 고치거나, 토큰을 인트로스펙션하거나, 특정 세션을 검증할 수 없습니다. 경우에 따라 이러한 작업은 필요하지 않으므로 사용자 세션을 유지하는 추가 리소스 사용을 피할 수 있습니다. 이 세션은 성능, 메모리 및 네트워크 통신(클러스터 및 데이터 센터 환경) 리소스를 저장합니다.

7장. 역할 및 그룹을 사용하여 권한 및 액세스 할당

역할 및 그룹에는 유사한 용도가 있으며 이는 사용자에게 애플리케이션을 사용할 수 있는 권한 및 권한을 부여하는 것입니다. 그룹은 역할 및 특성을 적용하는 사용자 컬렉션입니다. 역할은 특정 애플리케이션 권한 및 액세스 제어를 정의합니다.

일반적으로 역할은 한 유형의 사용자에게 적용됩니다. 예를 들어 조직에는 admin,user,manager, employees 역할이 포함될 있습니다. 애플리케이션은 역할에 액세스 및 권한을 할당한 다음 여러 사용자를 해당 역할에 할당하여 사용자가 동일한 액세스 및 권한을 가질 수 있습니다. 예를 들어 Admin Console에는 사용자에게 Admin Console의 다른 부분에 액세스할 수 있는 권한을 부여하는 역할이 있습니다.

역할에 대한 글로벌 네임스페이스가 있으며 각 클라이언트에는 역할을 정의할 수 있는 자체 전용 네임스페이스도 있습니다.

7.1. 영역 역할 생성

영역 수준 역할은 역할을 정의하는 네임스페이스입니다. 역할 목록을 보려면 메뉴에서 Roles 를 클릭합니다.

roles

절차

  1. 역할 추가를 클릭합니다.
  2. 역할 이름을 입력합니다.
  3. 설명을 입력합니다.
  4. 저장을 클릭합니다.

역할 추가

Add role

${var-name} 문자열로 대체 변수를 지정하여 description 필드를 지역화할 수 있습니다. 지역화된 값은 themes 속성 파일 내의me에 맞게 구성됩니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.

7.2. 클라이언트 역할

클라이언트 역할은 클라이언트 전용 네임스페이스입니다. 각 클라이언트는 자체 네임스페이스를 가져옵니다. 클라이언트 역할은 각 클라이언트의 역할 탭에서 관리됩니다. 이 UI와 영역 수준 역할과 동일한 방식으로 상호 작용합니다.

7.3. 역할을 복합 역할로 변환

모든 영역 또는 클라이언트 수준 역할은 복합 역할이 될 수 있습니다. 복합 역할은 하나 이상의 추가 역할이 연결된 역할입니다. 복합 역할이 사용자에게 매핑되면 사용자는 복합 역할과 연결된 역할을 받습니다. 이 상속은 재귀이므로 사용자도 복합 복합체를 상속합니다. 그러나 복합 역할은 과도하게 사용되지 않는 것이 좋습니다.

절차

  1. 메뉴에서 Roles (역할)를 클릭합니다.
  2. 변환할 역할을 클릭합니다.
  3. Composite RolesON 으로 전환합니다.

복합 역할

Composite role

역할 선택 UI가 페이지에 표시되고 영역 수준 및 클라이언트 수준 역할을 생성하는 복합 역할에 연결할 수 있습니다.

이 예에서는 직원 영역 수준 역할이 개발자 복합 역할과 연결되어 있습니다. developer 역할의 모든 사용자는 employees 역할을 상속 합니다.

참고

토큰 및 SAML 어설션을 생성할 때 모든 복합에는 클라이언트에 다시 전송된 인증 응답의 클레임 및 어설션에 연결된 역할도 추가됩니다.

7.4. 역할 매핑 할당

해당 사용자의 역할 매핑 탭을 통해 사용자에게 역할 매핑을 할당할 수 있습니다.

절차

  1. 메뉴에서 사용자를 클릭합니다.
  2. 역할 매핑을 수행할 사용자를 클릭합니다. 사용자가 표시되지 않으면 모든 사용자 보기 를 클릭합니다.
  3. Role Mappings 탭을 클릭합니다.
  4. 사용 가능한 역할 상자에서 사용자에게 할당할 역할을 클릭합니다.
  5. 선택한 추가 를 클릭합니다.

역할 매핑

Role mappings

이전 예에서는 복합 역할 개발자를 사용자에게 할당하고 있습니다. 해당 역할은 Composite Roles 주제에서 생성되었습니다.

효과적인 역할 매핑

Effective role mappings

개발자 역할이 할당되면 개발자 컴포지션 과 연결된 employees 역할이 효과 역할 상자에 표시됩니다. 효과적인 역할은 복합에서 상속된 사용자 및 역할에 명시적으로 할당된 역할입니다.

7.5. 기본 역할 사용

사용자가 ID 브로커링 을 통해 생성되거나 가져올 때 기본 역할을 사용하여 사용자 역할 매핑을 자동으로 할당합니다.

절차

  1. 메뉴에서 Roles 를 클릭합니다.
  2. Default Roles 탭을 클릭합니다.

기본 역할

Default roles

이 스크린샷은 일부 기본 역할이 이미 있음을 보여줍니다.

7.6. 역할 범위 매핑

OIDC 액세스 토큰 또는 SAML 어설션 생성 시 사용자 역할 매핑은 토큰 또는 어설션 내에서 클레임이 됩니다. 애플리케이션은 이러한 클레임을 사용하여 애플리케이션에서 제어하는 리소스에 대한 액세스 결정을 내립니다. Red Hat Single Sign-On은 액세스 토큰과 애플리케이션을 디지털 방식으로 서명하여 원격으로 보안된 REST 서비스를 호출합니다. 그러나 이러한 토큰에는 관련 위험이 있습니다. 공격자는 이러한 토큰을 확보하고 해당 권한을 사용하여 네트워크를 손상시킬 수 있습니다. 이 상황을 방지하려면 역할 범위 매핑을 사용하십시오.

역할 범위 매핑은 액세스 토큰 내에 선언된 역할을 제한합니다. 클라이언트에서 사용자 인증을 요청하면 수신하는 액세스 토큰에는 클라이언트 범위에 대해 명시적으로 지정된 역할 매핑만 포함됩니다. 결과적으로 모든 사용자 권한에 대한 클라이언트 액세스 액세스 권한을 부여하지 않고 각 개별 액세스 토큰의 권한을 제한합니다.

기본적으로 각 클라이언트는 사용자의 모든 역할 매핑을 가져옵니다. 각 클라이언트의 범위 탭에서 역할 매핑을 볼 수 있습니다.

전체 범위

Full scope

기본적으로 범위의 효과적인 역할은 해당 영역에서 모든 선언된 역할입니다. 이 기본 동작을 변경하려면 전체 범위를 ON 으로 전환하고 각 클라이언트에서 원하는 특정 역할을 선언합니다. 클라이언트 범위를 사용하여 클라이언트 집합에 대해 동일한 역할 범위 매핑을 정의할 수도 있습니다.

부분 범위

Partial scope

7.7. 그룹

Red Hat Single Sign-On의 그룹은 각 사용자에 대한 공통 특성 및 역할 매핑 세트를 관리합니다. 사용자는 임의의 수의 그룹의 멤버가 될 수 있으며 각 그룹에 할당된 속성 및 역할 매핑을 상속할 수 있습니다.

그룹을 관리하려면 메뉴에서 그룹을 클릭합니다.

그룹

groups

그룹은 계층적입니다. 그룹에는 여러 개의 하위 그룹이 있을 수 있지만 그룹에는 상위 그룹이 하나만 있을 수 있습니다. 하위 그룹은 상위 항목에서 특성 및 역할 매핑을 상속합니다. 사용자는 상위에서 속성 및 역할 매핑도 상속합니다.

상위 그룹과 하위 그룹이 있고 하위 그룹에만 속하는 사용자가 있는 경우 하위 그룹의 사용자는 상위 그룹과 하위 그룹의 속성 및 역할 매핑을 상속합니다.

다음 예제에는 최상위 Sales 그룹과 North America 하위 그룹이 포함되어 있습니다.

그룹을 추가하려면 다음을 수행합니다.

  1. 그룹을 클릭합니다.
  2. New 를 클릭합니다.
  3. 트리에서 그룹 아이콘을 선택하여 최상위 그룹을 만듭니다.
  4. 그룹 만들기 화면에 그룹 이름을 입력합니다.
  5. 저장을 클릭합니다.

    그룹 관리 페이지가 표시됩니다.

    그룹

    group

정의한 속성 및 역할 매핑은 그룹의 멤버인 그룹 및 사용자에 의해 상속됩니다.

그룹에 사용자를 추가하려면 다음을 수행합니다.

  1. 메뉴에서 사용자를 클릭합니다.
  2. 역할 매핑을 수행할 사용자를 클릭합니다. 사용자가 표시되지 않으면 모든 사용자 보기 를 클릭합니다.
  3. 그룹을 클릭합니다.

    사용자 그룹

    user groups

  4. 사용 가능한 그룹 트리에서 그룹을 선택합니다.
  5. Join 을 클릭합니다.

사용자에서 그룹을 제거하려면 다음을 수행합니다.

  1. 그룹 멤버십 트리에서 그룹을 선택합니다.
  2. Leave 를 클릭합니다.

이 예에서 사용자 jimlincoln북미 그룹에 있습니다. 그룹의 멤버 탭에서 Jimlincoln 이 표시되는 것을 볼 수 있습니다.

그룹 멤버십

group membership

7.7.1. 역할과 비교된 그룹

그룹 및 역할에는 몇 가지 중요도와 차이점이 있습니다. Red Hat Single Sign-On에서 그룹은 역할 및 특성을 적용하는 사용자 컬렉션입니다. 역할은 사용자 및 애플리케이션의 유형을 정의하므로 권한 및 액세스 제어가 역할에 할당됩니다.

복합 역할은 동일한 기능을 제공하는 그룹과 유사합니다. 이 둘의 차이점은 개념입니다. 복합 역할은 권한 모델을 서비스 및 애플리케이션 집합에 적용합니다. 복합 역할을 사용하여 애플리케이션 및 서비스를 관리합니다.

그룹은 조직의 사용자 및 사용자 역할 컬렉션에 중점을 둡니다. 그룹을 사용하여 사용자 관리.

7.7.2. 기본 그룹 사용

Identity Brokering 을 통해 가져오거나 가져온 모든 사용자에게 그룹 멤버십을 자동으로 할당하려면 기본 그룹을 사용합니다.

  1. 메뉴에서 그룹을 클릭합니다.
  2. Default Groups 탭을 클릭합니다.

기본 그룹

Default groups

이 스크린샷은 일부 기본 그룹이 이미 있음을 보여줍니다.

8장. 인증 구성

이 장에서는 여러 인증 주제를 다룹니다. 다음 주제는 다음과 같습니다.

  • 엄격한 암호 및 OTP(한시 암호) 정책 시행.
  • 다양한 인증 정보 유형 관리.
  • Kerberos로 로그인.
  • 기본 제공 인증 정보 유형 비활성화 및 활성화

8.1. 암호 정책

Red Hat Single Sign-On이 영역을 생성하면 암호 정책을 영역과 연결하지 않습니다. 길이, 보안 또는 복잡성에 대한 제한 없이 간단한 암호를 설정할 수 있습니다. 간단한 암호는 프로덕션 환경에서 유해하지 않습니다. Red Hat Single Sign-On에는 관리 콘솔을 통해 사용할 수 있는 암호 정책 세트가 있습니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 암호 정책 탭을 클릭합니다.
  3. 정책 추가 드롭다운 상자에서 추가할 정책을 선택합니다.
  4. 선택한 정책과 해당하는 Policy Value 값을 입력합니다.
  5. 저장을 클릭합니다.

    암호 정책 Password Policy

정책을 저장한 후 Red Hat Single Sign-On은 새 사용자에 대한 정책을 적용하고 기존 사용자가 다음에 로그인할 때 암호를 변경하도록 Update Password 작업을 설정합니다. 예를 들면 다음과 같습니다.

실패한 암호 정책

Failed Password Policy

8.1.1. 암호 정책 유형

8.1.1.1. 해시 알고리즘

암호는 일반 텍스트로 저장되지 않습니다. 스토리지 또는 유효성 검사 전에 Red Hat Single Sign-On은 PBKDF2, PBKDF2-SHA256 및 PBKDF-SHA512 해시 알고리즘을 지원하는 표준 해시 알고리즘 Red Hat Single Sign-On의 암호를 해시합니다.

8.1.1.2. 반복 해시

스토리지 또는 확인 전에 Red Hat Single Sign-On 해시 암호의 횟수를 지정합니다. 기본값은 27,500입니다.

Red Hat Single Sign-On은 암호를 해시하여 암호 데이터베이스에 액세스할 수 있는 적대적인 행위자가 역방향 엔지니어링을 통해 암호를 읽을 수 없도록 합니다.

참고

해시가 높은 반복 값은 더 높은 CPU 전력이 필요하므로 성능에 영향을 줄 수 있습니다.

8.1.1.3. 숫자

암호 문자열에 필요한 숫자 수입니다.

8.1.1.4. 소문자

암호 문자열에 필요한 소문자 수입니다.

8.1.1.5. 대문자

암호 문자열에 필요한 대문자 수입니다.

8.1.1.6. 특수 문자

암호 문자열에 필요한 특수 문자 수입니다.

8.1.1.7. 사용자 이름 없음

암호는 사용자 이름과 같을 수 없습니다.

8.1.1.8. 이메일 없음

암호는 사용자의 이메일 주소와 같을 수 없습니다.

8.1.1.9. 정규 표현식

password는 하나 이상의 정의된 정규식 패턴과 일치해야 합니다.

8.1.1.10. 만료 암호

암호가 유효한 날짜 수입니다. 날짜 수가 만료된 경우 사용자는 암호를 변경해야 합니다.

8.1.1.11. 최근 사용되지 않음

사용자가 이미 비밀번호를 사용할 수 없습니다. Red Hat Single Sign-On은 사용된 암호 기록을 저장합니다. 저장된 이전 암호 수는 Red Hat Single Sign-On에서 구성할 수 있습니다.

8.1.1.12. 암호 블랙리스트

암호는 블랙리스트 파일에 없어야 합니다.

  • 블랙리스트 파일은 Unix 라인 종료와 함께 UTF-8 일반 텍스트 파일입니다. 모든 행은 블랙리스트로 지정된 암호를 나타냅니다.
  • Red Hat Single Sign-On은 대소문자를 구분하지 않는 방식으로 암호를 비교합니다. 블랙리스트의 모든 암호는 소문자여야 합니다.
  • 블랙리스트 파일의 값은 블랙리스트 파일의 이름이어야 합니다.
  • 기본적으로 ${jboss.server.data.dir}/password-blacklists/ 에 대해 블랙리스트 파일이 확인됩니다. 다음을 사용하여 이 경로를 사용자 정의합니다.

    • keycloak.password.blacklists.path 속성입니다.
    • passwordBlacklist 정책 SPI 구성의 blacklistsPath 속성입니다.

8.2. OTP(한 번 암호) 정책

Red Hat Single Sign-On에는 FreeOTP 또는 Google Authenticator One-Time Password 생성기를 설정하기 위한 몇 가지 정책이 있습니다. 인증 메뉴를 클릭하고 OTP 정책 탭을 클릭합니다.

OTP 정책

OTP Policy

Red Hat Single Sign-On은 OTP 정책 탭에서 구성된 정보를 기반으로 OTP 설정 페이지에서 QR 코드를 생성합니다. FreeOTP 및 Google Authenticator는 OTP를 구성할 때 QR 코드를 스캔합니다.

8.2.1. 시간 기반 또는 카운터 기반 암호 1시간 암호

OTP 생성기에 대해 Red Hat Single Sign-On에서 사용할 수 있는 알고리즘은 시간 기반이며 카운터 기반 알고리즘입니다.

TOTP(Time-Based One Time Passwords)를 사용하면 토큰 생성기가 현재 시간과 공유 시크릿을 해시합니다. 서버는 시간 내에 있는 해시를 제출된 값과 비교하여 OTP를 검증합니다. TOTP는 짧은 기간 동안 유효합니다.

qemu-Based One Time Passwords (HOTP)를 사용하면 Red Hat Single Sign-On은 현재 시간이 아닌 공유 카운터를 사용합니다. Red Hat Single Sign-On 서버는 OTP 로그인을 성공적으로 수행할 때마다 카운터를 늘립니다. 로그인에 성공한 후 유효한 OTP가 변경됩니다.

TOTP는 일치하는 OTP가 짧은 기간 동안 유효하고 OTP는 결정되지 않은 시간 동안 유효하기 때문에 TOTP는 보다 안전합니다. OTP에 들어가는 시간 제한이 없으므로 TOTP보다 사용자에게 친숙한 시간이 없습니다.

서버가 카운터를 증가할 때마다 데이터베이스를 업데이트해야 합니다. 이번 업데이트에서는 로드가 많은 동안 인증 서버에서 성능이 저하됩니다. 효율성을 높이기 위해 TOTP는 사용된 암호를 기억하지 않으므로 데이터베이스 업데이트를 수행할 필요가 없습니다. 단점은 유효한 시간 간격으로 TOTP를 다시 사용할 수 있다는 것입니다.

8.2.2. TOTP 구성 옵션

8.2.2.1. OTP 해시 알고리즘

기본 알고리즘은 SHA1입니다. 더 안전한 다른 옵션은 SHA256 및 SHA512입니다.

8.2.2.2. 숫자

OTP의 길이입니다. 짧은 OTP는 사용자 친화적인, 입력이 쉽고, 기억하는 것이 더 쉽습니다. OTP의 길이가 짧은 OTP보다 더 안전합니다.

8.2.2.3. 창 둘러보기

서버가 해시와 일치하려고 시도하는 간격 수입니다. 이 옵션은 TOTP 생성기 또는 인증 서버의 클럭이 out-of-sync가 되면 Red Hat Single Sign-On에 있습니다. 기본값은 1입니다. 예를 들어, 토큰의 시간 간격이 30초인 경우 기본값 1은 90초 창에서 유효한 토큰을 수락한다는 것을 의미합니다(시간 간격 30초 + 후방 30초 + 뒤보기 30초). 이 값의 각 증분은 유효한 창을 60 초로 늘립니다 (30 초 + 후방 참조).

8.2.2.4. OTP 토큰 기간

시간 간격(초)입니다. 서버가 해시와 일치합니다. 간격이 통과할 때마다 토큰 생성기가 TOTP를 생성합니다.

8.2.3. CloudEventP 구성 옵션

8.2.3.1. OTP 해시 알고리즘

기본 알고리즘은 SHA1입니다. 더 안전한 다른 옵션은 SHA256 및 SHA512입니다.

8.2.3.2. 숫자

OTP의 길이입니다. 짧은 OTP는 사용자 친화적인, 입력이 쉽고, 기억하는 것이 더 쉽습니다. 긴 OTP는 OTP보다 더 안전합니다.

8.2.3.3. 창 앞으로 보기

서버가 해시와 일치하려고 시도하는 간격 수입니다. 이 옵션은 TOTP 생성기 또는 인증 서버의 시계가 동기화되지 않는 경우 Red Hat Single Sign-On에 있습니다. 기본값은 1입니다. 이 옵션은 Red Hat Single Sign-On에 있으며 사용자의 카운터가 서버보다 앞서 나가는 시기를 다룹니다.

8.2.3.4. 초기 카운터

초기 카운터의 값입니다.

8.3. 인증 흐름

인증 흐름 은 로그인, 등록 및 기타 Red Hat Single Sign-On 워크플로 중 인증, 화면 및 작업의 컨테이너입니다. 모든 흐름, 작업 및 검사를 보려면 각 흐름에는 다음이 필요합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 흐름 탭을 클릭합니다.

8.3.1. 기본 제공 흐름

Red Hat Single Sign-On에는 여러 가지 흐름이 내장되어 있습니다. 이러한 흐름을 수정할 수는 없지만 필요에 맞게 흐름의 요구 사항을 변경할 수 있습니다.

드롭다운 목록에서 브라우저 를 선택하여 browsers Flow 화면을 표시합니다.

브라우저 흐름

Browser Flow

드롭다운 목록의 질문 표시 툴팁 위로 커서를 이동하여 흐름에 대한 설명을 확인합니다. 두 섹션이 있습니다.

8.3.1.1. auth 유형

인증 또는 실행할 작업의 이름입니다. 인증을 들여쓰기하면 하위 흐름에 있습니다. 부모의 동작에 따라 실행될 수도 있고 그렇지 않을 수도 있습니다.

  1. 쿠키

    사용자가 처음 로그인하면 Red Hat Single Sign-On이 세션 쿠키를 설정합니다. 쿠키가 이미 설정되어 있으면 이 인증 유형이 성공한 것입니다. 쿠키 공급자는 성공을 반환하고 이 수준의 흐름에서 각 실행을 대체 하므로 Red Hat Single Sign-On은 다른 실행을 수행하지 않습니다. 이로 인해 로그인에 성공합니다.

  2. Kerberos

    이 인증자는 기본적으로 비활성화되어 있으며 IANA 흐름 중에 건너뜁니다.

  3. ID 공급자 리디렉션

    이 작업은 Actions > Config 링크를 통해 구성됩니다. ID 브로커 를 위해 다른 IdP로 리디렉션됩니다.

  4. 양식

    이 하위 흐름이 대안으로 표시되므로 authentication 유형이 통과된 경우 실행되지 않습니다. 이 하위 흐름에는 실행해야 하는 추가 인증 유형이 포함되어 있습니다. Red Hat Single Sign-On은 이 하위 흐름에 대한 실행을 로드하고 처리합니다.

첫 번째 실행은 사용자 이름 암호 양식에 사용자 이름 및 암호 페이지를 렌더링하는 인증 유형입니다. 필수 로 표시되어 있으므로 사용자가 유효한 사용자 이름과 암호를 입력해야 합니다.

두 번째 실행은 browsers - Conditional OTP 하위 흐름입니다. 이 하위 흐름은 조건 - 사용자 구성 실행 결과에 따라 조건부 실행됩니다. 결과가 true인 경우 Red Hat Single Sign-On은 이 하위 흐름에 대한 실행을 로드하여 처리합니다.

다음 실행은 상태 - 사용자 구성 인증입니다. 이 인증은 Red Hat Single Sign-On이 사용자의 흐름에 다른 실행을 구성했는지 확인합니다. browser - Conditional OTP 하위 흐름은 사용자가 OTP 인증 정보가 구성된 경우에만 실행됩니다.

최종 실행은 OTP Form 입니다. Red Hat Single Sign-On은 이 실행을 필요에 따라 표시되지만 조건부 하위 흐름의 설정으로 인해 사용자에게 OTP 인증 정보가 설정된 경우에만 실행됩니다. 그렇지 않은 경우 사용자는 OTP 양식을 볼 수 없습니다.

8.3.1.2. 요구 사항

작업 실행을 제어하는 일련의 라디오 버튼이 실행됩니다.

8.3.1.2.1. 필수 항목

흐름에 필요한 모든 요소는 순차적으로 실행해야 합니다. 필요한 요소가 실패하면 흐름이 종료됩니다.

8.3.1.2.2. alternative

흐름이 성공한 것으로 평가되려면 단일 요소만 성공적으로 실행해야 합니다. 필수 흐름 요소는 흐름을 성공으로 표시하기에 충분하기 때문에 필수 흐름 요소가 포함된 흐름 내의 모든 대체 흐름 요소는 실행되지 않습니다.Because the Required flow elements are sufficient to mark a flow as successful, any Alternative flow element within a flow containing Required flow elements will not execute.

8.3.1.2.3. disabled

요소는 흐름을 성공으로 표시하는 것으로 계산되지 않습니다.

8.3.1.2.4. Condition

이 요구 사항 유형은 하위 흐름에서만 설정됩니다.

  • Conditional 하위 흐름에는 실행이 포함됩니다. 이러한 실행은 논리 문으로 평가되어야 합니다.
  • 모든 실행이 true 로 평가되면 조건 하위 흐름이 Required 로 작동합니다.
  • 모든 실행이 false 로 평가되면 Conditional 하위 흐름이 Disabled 로 작동합니다.
  • 실행을 설정하지 않으면 Conditional 하위 흐름이 Disabled 로 작동합니다.
  • 흐름에 실행이 포함되어 있고 흐름이 조건부 로 설정되지 않은 경우 Red Hat Single Sign-On은 실행을 평가하지 않으며 실행은 기능적으로 Disabled 로 간주됩니다.

8.3.2. 흐름 생성

중요한 기능 및 보안 고려 사항은 흐름을 설계할 때 적용됩니다.

흐름을 만들려면 다음을 수행합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. New 를 클릭합니다.
참고

기존 흐름을 복사한 다음 수정할 수 있습니다. 흐름을 선택하고 복사를 클릭하고 새 흐름의 이름을 입력합니다.

새 흐름을 만들 때 먼저 다음 옵션을 사용하여 최상위 흐름을 만들어야 합니다.

별칭
흐름의 이름입니다.
설명
흐름으로 설정할 수 있는 설명입니다.
최상위 흐름 유형
흐름의 유형입니다. 유형 클라이언트는 클라이언트 (애플리케이션)의 인증에만 사용됩니다. 다른 모든 경우에는 generic 을 선택합니다.

최상위 흐름 생성

Top Level Flow

Red Hat Single Sign-On이 흐름을 생성하면 Red Hat Single Sign-On에 삭제,실행 추가, 흐름 추가 버튼이 표시됩니다.

비어 있는 새 흐름

New Flow

세 가지 요소는 흐름 및 하위 흐름의 동작을 결정합니다.

  • 흐름 및 하위 흐름 구조입니다.
  • 흐름 내의 실행
  • 하위 흐름 및 실행 내에 설정된 요구 사항입니다.

실행은 재설정 이메일을 OTP 검증에 보내는 것부터 다양한 작업을 수행합니다. 실행 추가 버튼을 사용하여 실행을 추가합니다. 실행에 대한 설명을 보려면 공급자 옆에 있는 물음표 위로 마우스를 가져갑니다.

인증 실행 추가

Adding an Authentication Execution

두 가지 유형의 실행, 자동 실행대화형 실행이 있습니다. 자동 실행 은 10.0.0.1 실행 과 유사하며 흐름에서 자동으로 작업을 수행합니다. 대화형 실행 은 입력을 받기 위한 흐름을 중지합니다. 실행을 성공적으로 실행하면 상태가 success 로 설정됩니다. 흐름을 완료하려면 성공 상태의 실행이 하나 이상 필요합니다.

흐름 추가 버튼을 사용하여 최상위 흐름에 하위 흐름을 추가할 수 있습니다. 흐름 추가 버튼을 클릭하면 실행 흐름 만들기 페이지가 표시됩니다. 이 페이지는 최상위 양식 만들기 페이지와 유사합니다. 차이점은 흐름 유형이 일반 (기본값) 또는 형식일 수 있다는 것입니다. 양식 유형은 내장 등록 흐름과 유사하게 사용자의 양식을 생성하는 하위 흐름을 구성합니다. 하위 흐름 성공 여부는 포함된 하위 흐름을 포함하여 실행 결과를 평가하는 방법에 따라 달라집니다. 하위 흐름이 작동하는 방법에 대한 자세한 내용은 실행 요구 사항 섹션 을 참조하십시오.

참고

실행을 추가한 후 요구 사항에 올바른 값이 있는지 확인합니다.

흐름의 모든 요소에는 작업 메뉴의 Delete 옵션이 있습니다. 이 작업은 흐름에서 요소를 제거합니다. 실행에는 실행을 구성하는 Config 메뉴 옵션이 있습니다. 또한 실행 추가 및 흐름 추가 메뉴 옵션을 사용하여 실행 및 하위 흐름을 하위 흐름에 추가할 수도 있습니다.

실행 순서가 중요하므로 위 및 아래 버튼을 사용하여 흐름 내에서 실행 및 하위 흐름을 해당 이름 옆에 이동할 수 있습니다.

주의

인증 흐름을 구성할 때 구성을 올바르게 테스트하여 설정에 보안 문제가 없는지 확인합니다. 다양한 코너 케이스를 테스트하는 것이 좋습니다. 예를 들어 인증 전에 사용자 계정에서 다양한 인증 정보를 제거할 때 사용자의 인증 동작을 테스트하는 것이 좋습니다.

예를 들어 OTP Form 또는 WebAuthn Authenticator와 같은 2차 인증자가 REQUIRED로 흐름에 구성되고 사용자에게 특정 유형의 인증 정보가 없는 경우 사용자는 인증 과정에서 특정 인증 정보를 설정할 수 있습니다. 이 경우 인증 중에 사용자가 인증할 때 이 자격 증명을 인증하지 않습니다. 브라우저 인증의 경우 암호 또는 WebAuthn Passwordless Authenticator와 같은 1단계 인증 정보로 인증 흐름을 구성해야 합니다.

8.3.3. 암호 없는 브라우저 로그인 흐름 생성

흐름 생성을 설명하기 위해 이 섹션에서는 고급 브라우저 로그인 흐름 만들기에 대해 설명합니다. 이 흐름의 목적은 사용자가 WebAuthn 을 사용하여 암호 없는 방식으로 로그인하거나 암호 및 OTP를 사용한 2단계 인증 중에서 선택할 수 있도록 하는 것입니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 흐름 탭을 클릭합니다.
  3. New 를 클릭합니다.
  4. browser Password-less 를 별칭으로 입력합니다.
  5. 저장을 클릭합니다.
  6. 실행 추가를 클릭합니다.
  7. 드롭다운 목록에서 10.0.0.1을 선택합니다.
  8. 저장을 클릭합니다.
  9. authentication type에 대해 Alternative 를 클릭하여 요구 사항을 alternative로 설정합니다.
  10. 실행 추가를 클릭합니다.
  11. 드롭다운 목록에서 Kerberos 를 선택합니다.
  12. 실행 추가를 클릭합니다.
  13. 드롭다운 목록에서 ID 공급자 리디렉션 을 선택합니다.
  14. 저장을 클릭합니다.
  15. Identity Provider Redirector 인증 유형으로 Alternative 를 클릭하여 요구 사항을 alternative로 설정합니다.
  16. 흐름 추가를 클릭합니다.
  17. 별칭 으로 CloudEvent를 입력합니다.
  18. 저장을 클릭합니다.
  19. forms 인증 유형으로 Alternative 를 클릭하여 요구 사항을 alternative로 설정합니다.

    브라우저 흐름의 공통 부분

    Passwordless browser login common

  20. forms 실행에 대한 작업을 클릭합니다.
  21. 실행 추가를 선택합니다.
  22. 드롭다운 목록에서 사용자 이름 양식을 선택합니다.
  23. 저장을 클릭합니다.
  24. Username Form 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.

이 단계에서 양식에는 사용자 이름만 필요하지만 암호가 필요하지 않습니다. 보안 위험을 방지하려면 암호 인증을 활성화해야 합니다.

  1. forms 하위 흐름에 대한 작업을 클릭합니다.
  2. 흐름 추가를 클릭합니다.
  3. 별칭으로 Authentication 을 입력합니다.
  4. 저장을 클릭합니다.
  5. Authentication 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.
  6. 인증 하위 흐름에 대한 작업을 클릭합니다.
  7. 실행 추가를 클릭합니다.
  8. 드롭다운 목록에서 Webauthn Passwordless Authenticator 를 선택합니다.
  9. 저장을 클릭합니다.
  10. Webauthn Passwordless Authenticator 인증 유형으로 Alternative 를 클릭하여 요구 사항을 alternative로 설정합니다.
  11. 인증 하위 흐름에 대한 작업을 클릭합니다.
  12. 흐름 추가를 클릭합니다.
  13. 별칭 으로 OTP가 포함된 Password 를 입력합니다.
  14. 저장을 클릭합니다.
  15. OTP 인증 유형으로 암호 대체 를 클릭하여 요구 사항을 alternative로 설정합니다.
  16. OTP 하위 흐름을 사용하여 암호에 대한 작업을 클릭합니다.
  17. 실행 추가를 클릭합니다.
  18. 드롭다운 목록에서 Password Form 을 선택합니다.
  19. 저장을 클릭합니다.
  20. Password Form 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.
  21. OTP 하위 흐름을 사용하여 암호에 대한 작업을 클릭합니다.
  22. 실행 추가를 클릭합니다.
  23. 드롭다운 목록에서 OTP 양식을 선택합니다.
  24. 저장을 클릭합니다.
  25. OTP Form 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.

마지막으로 바인딩을 변경합니다.

  1. 바인딩 탭을 클릭합니다.
  2. browsers flow 드롭다운 목록을 클릭합니다.
  3. 드롭다운 목록에서 generated Password-less 를 선택합니다.
  4. 저장을 클릭합니다.

암호 없는 브라우저 로그인

Passwordless browser login

사용자 이름을 입력하면 흐름은 다음과 같이 작동합니다.

사용자에게 WebAuthn 암호 없는 인증 정보가 기록된 경우 이러한 자격 증명을 사용하여 직접 로그인할 수 있습니다. 암호가 없는 로그인입니다. WebAuthn Passwordless 실행 및 OTP를 통한 암호 흐름이 Alternative 로 설정되어 있기 때문에 사용자가 OTP로 암호 를 선택할 수도 있습니다. Required 로 설정된 경우 사용자는 WebAuthn, password 및 OTP를 입력해야 합니다.

사용자가 WebAuthn 암호 없는 인증을 사용하여 다른 방법 확인 링크를 선택하면 사용자는 암호보안 키 (WebAuthn 암호 없이)를 선택할 수 있습니다. 암호를 선택할 때 사용자는 계속해서 할당된 OTP로 로그인해야 합니다. 사용자에게 WebAuthn 자격 증명이 없는 경우 사용자는 암호를 입력한 다음 OTP를 입력해야 합니다. 사용자에게 OTP 인증 정보가 없는 경우 인증 정보를 기록하도록 요청합니다.

참고

WebAuthn 암호 없는 실행은 필수 가 아닌 Alternative 로 설정되어 있으므로 이 흐름은 사용자에게 WebAuthn 자격 증명을 등록하도록 요청하지 않습니다. 사용자가 Webauthn 자격 증명을 가지려면 관리자가 사용자에게 필요한 작업을 추가해야 합니다. 다음을 수행하여 수행합니다.

  1. 영역에서 Webauthn Register Passwordless 필수 작업 활성화( WebAuthn 문서 참조).
  2. 사용자의 자격 증명 관리 메뉴의 Credential Reset 부분을 사용하여 필요한 작업을 설정합니다. ???

이와 같은 고급 흐름을 만드는 것은 부작용이 있을 수 있습니다. 예를 들어 사용자의 암호를 재설정하는 기능을 활성화하면 암호 양식에서 액세스할 수 있습니다. 기본 인증 정보 재설정 흐름에서 사용자가 사용자 이름을 입력해야 합니다. 사용자가 이미 browser -less flow에서 이전에 사용자 이름을 입력했기 때문에 이 작업은 Red Hat Single Sign-On 및 사용자 경험에 대해 부적합합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.

  • Reset Credentials flow를 복사합니다. 암호 없이 자격 증명을 재설정 하도록 이름을 설정합니다. 예를 들면 다음과 같습니다.
  • choosing user execution의 Actions 메뉴에서 Delete 를 선택합니다.
  • Bindings (바인딩) 메뉴에서 reset credential flow를 Reset Credentials 에서 암호 없이 자격 증명 재설정으로 변경합니다.

8.3.4. 단계별 메커니즘을 사용하여 브라우저 로그인 흐름 생성

이 섹션에서는 단계별 메커니즘을 사용하여 고급 브라우저 로그인 흐름을 만드는 방법에 대해 설명합니다. 단계별 인증은 사용자의 특정 인증 수준에 따라 클라이언트 또는 리소스에 대한 액세스를 허용하는 것입니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 흐름 탭을 클릭합니다.
  3. New 를 클릭합니다.
  4. iPXE Incl Step up Mechanism 을 별칭으로 입력합니다.
  5. 저장을 클릭합니다.
  6. 실행 추가를 클릭합니다.
  7. 항목 목록에서 태그를 선택합니다.
  8. 저장을 클릭합니다.
  9. authentication type에 대해 Alternative 를 클릭하여 요구 사항을 alternative로 설정합니다.
  10. 흐름 추가를 클릭합니다.
  11. 별칭으로 Auth Flow 를 입력합니다.
  12. 저장을 클릭합니다.
  13. Auth Flow 인증 유형으로 대체 를 클릭하여 요구 사항을 alternative로 설정합니다.

이제 첫 번째 인증 수준에 대한 흐름을 구성합니다.

  1. Auth Flow 에 대한 작업을 클릭합니다.
  2. 흐름 추가를 클릭합니다.
  3. 별칭으로 1번째 조건 흐름을 입력합니다.
  4. 저장을 클릭합니다.
  5. 1st Condition Flow 인증 유형에 대해 Conditional 을 클릭하여 요구 사항을 Condition으로 설정합니다.
  6. 1번째 조건 흐름에 대한 작업을 클릭합니다.
  7. 실행 추가를 클릭합니다.
  8. 항목 목록에서 조건 - 인증 수준을 선택합니다.
  9. 저장을 클릭합니다.
  10. 조건 - 인증 수준 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.
  11. 조건 - 수준 인증의 작업을 클릭합니다.
  12. Config 를 클릭합니다.
  13. 별칭으로 Level 1 을 입력합니다.
  14. Level of Authentication (LoA)에 1 을 입력합니다.
  15. 최대 사용 기간을36000으로 설정합니다. 이 값은 초 단위이며 영역에 설정된 기본 SSO 세션 최대 시간 제한 시간입니다. 결과적으로 사용자가 이 수준으로 인증하면 SSO 로그인이 이 수준을 다시 사용할 수 있으며 사용자는 기본적으로 10시간인 사용자 세션이 종료될 때까지 이 수준으로 인증할 필요가 없습니다.
  16. 저장을 클릭합니다.

    첫 번째 인증 수준에 대한 조건 구성

    authentication step up condition 1

  17. 1번째 조건 흐름에 대한 작업을 클릭합니다.
  18. 실행 추가를 클릭합니다.
  19. 항목 목록에서 사용자 이름 암호 양식을 선택합니다.
  20. 저장을 클릭합니다.
  21. Username Password Form 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.

이제 두 번째 인증 수준에 대한 흐름을 구성합니다.

  1. Auth Flow 에 대한 작업을 클릭합니다.
  2. 흐름 추가를 클릭합니다.
  3. 별칭으로 2nd Condition Flow 를 입력합니다.
  4. 저장을 클릭합니다.
  5. 2nd Condition Flow 인증 유형에 대해 Conditional 을 클릭하여 요구 사항을 Condition으로 설정합니다.
  6. 2nd Condition Flow 에 대한 작업을 클릭합니다.
  7. 실행 추가를 클릭합니다.
  8. 항목 목록에서 조건 - 인증 수준을 선택합니다.
  9. 저장을 클릭합니다.
  10. 조건 - 인증 수준 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.
  11. 조건 - 수준 인증의 작업을 클릭합니다.
  12. Config 를 클릭합니다.
  13. 별칭으로 Level 2 를 입력합니다.
  14. Level of Authentication (LoA)에 2 를 입력합니다.
  15. 최대 사용 기간을 0 으로 설정합니다. 결과적으로 사용자가 인증하면 이 수준은 현재 인증에만 유효하지만 후속 SSO 인증은 아닙니다. 따라서 사용자는 이 수준이 요청될 때 항상 이 수준으로 다시 인증해야 합니다.
  16. 저장을 클릭합니다.

    두 번째 인증 수준에 대한 조건 구성

    authentication step up condition 2

  17. 2nd Condition Flow 에 대한 작업을 클릭합니다.
  18. 실행 추가를 클릭합니다.
  19. 항목 목록에서 OTP 양식을 선택합니다.
  20. 저장을 클릭합니다.
  21. OTP Form 인증 유형에 대해 Required 를 클릭하여 요구 사항을 required로 설정합니다.

마지막으로 바인딩을 변경합니다.

  1. 바인딩 탭을 클릭합니다.
  2. browser Flow 항목 목록을 클릭합니다.
  3. 항목 목록에서 generated Incl Step up Mechanism 을 선택합니다.
  4. 저장을 클릭합니다.

단계적 메커니즘으로 브라우저 로그인

authentication step up flow

특정 인증 수준 요청

단계별 메커니즘을 사용하려면 인증 요청에 요청된 LoA(인증 수준)를 지정합니다. claims 매개변수는 이러한 용도로 사용됩니다.

https://{DOMAIN}/auth/realms/{REALMNAME}/protocol/openid-connect/auth?client_id={CLIENT-ID}&redirect_uri={REDIRECT-URI}&scope=openid&response_type=code&response_mode=query&nonce=exg16fxdjcu&claims=%7B%22id_token%22%3A%7B%22acr%22%3A%7B%22essential%22%3Atrue%2C%22values%22%3A%5B%22gold%22%5D%7D%7D%7D

claims 매개변수는 JSON 표현으로 지정됩니다.

claims= {
            "id_token": {
                "acr": {
                    "essential": true,
                    "values": ["gold"]
                }
            }
        }

Red Hat Single Sign-On JavaScript 어댑터는 이 JSON을 쉽게 구성하고 로그인 요청으로 전송합니다. 자세한 내용은 JavaScript 어댑터 문서를 참조하십시오.

claim 매개변수 대신 더 간단한 매개변수 acr_values 를 사용하여 특정 수준을 필수가 아닌 값으로 요청할 수도 있습니다. 이는 OIDC 사양에 설명되어 있습니다.

acr_values 매개변수 또는 acr 클레임이 있는 매개변수 클레임 이 없을 때 사용되는 특정 클라이언트에 대한 기본 수준을 구성할 수도 있습니다. 자세한 내용은 클라이언트 ACR 구성을참조하십시오.

참고

숫자 값 대신 acr_values(예: gold)로 acr_values를 요청하려면 ACR과 KiA 간의 매핑을 구성합니다. 영역 수준(권장) 또는 클라이언트 수준에서 구성할 수 있습니다. 구성을 보려면 ACR to KiA Mapping 을 참조하십시오.

자세한 내용은 공식 OIDC 사양 을 참조하십시오.

흐름 논리

이전에 구성된 인증 흐름의 논리는 다음과 같습니다.
클라이언트가 인증 2(LoA 2)의 고급 인증 수준을 요청하는 경우 사용자는 전체 2 단계 인증(사용자 이름/암호 + OTP)을 수행해야 합니다. 그러나 사용자에게 이미 사용자 이름과 암호(LoA 1)로 로그인한 Keycloak에 세션이 있는 경우 사용자에게 두 번째 OTP(인증 요인)만 요청됩니다.

조건의 Max Age (최대 기간) 옵션은 후속 인증 수준의 유효 기간(초)을 결정합니다. 이 설정은 후속 인증 중에 사용자에게 인증 요소를 다시 제공하도록 요청할지 여부를 결정하는 데 도움이 됩니다. 클레임 또는 acr_values 매개변수에 의해 요청되고 레벨 X로 이미 인증된 경우(예: max age는 300으로 구성되고 310초 전에 인증한 사용자) 특정 수준으로 다시 인증하라는 요청을 받습니다. 그러나 수준이 아직 만료되지 않은 경우 사용자는 해당 수준으로 자동으로 인증된 것으로 간주됩니다.

값이 0인 Max Age 를 사용하면 특정 수준이 이 단일 인증에서만 유효합니다. 따라서 해당 수준을 요청하는 모든 재인증은 해당 수준으로 다시 인증해야 합니다. 이는 애플리케이션에서 더 높은 보안이 필요한 작업(예: 결제 전송)에 유용하며 항상 특정 수준의 인증이 필요합니다.

주의

로그인 요청이 클라이언트에서 사용자 브라우저를 통해 Red Hat Single Sign-On으로 전송될 때 클레임 또는 acr_values 와 같은 매개 변수는 URL의 사용자가 변경할 수 있습니다. 클라이언트가 PAR(Pushed Authorization Request), 요청 오브젝트 또는 사용자가 URL에서 매개변수를 다시 작성하지 못하도록 하는 기타 메커니즘을 사용하는 경우 이러한 상황을 완화할 수 있습니다. 따라서 인증 후 클라이언트는 ID 토큰을 확인하여 토큰의 acr 이 예상 수준에 해당하는지 다시 확인하는 것이 좋습니다.

매개 변수에서 명시적 수준을 요청하지 않는 경우 Red Hat Single Sign-On에는 이전 예제의 Username/Password와 같은 인증 흐름에 있는 첫 번째 KiA 조건으로 인증이 필요합니다. 사용자가 해당 수준으로 이미 인증되고 해당 수준이 만료된 경우 사용자는 다시 인증되지 않아도 되지만 토큰의 acr 값은 0입니다. 이 결과는 OIDC Core 1.0 사양의 섹션 2에 언급된 대로 수 명이 긴 브라우저 쿠키 만을 기반으로 한 인증으로 간주됩니다.

참고

충돌이 발생하는 상황은 관리자가 여러 흐름을 지정하고, 각각에 서로 다른 loA 수준을 설정하고, 다른 클라이언트에 흐름을 할당할 때 발생할 수 있습니다. 그러나 규칙은 항상 동일합니다. 사용자가 특정 수준이 있는 경우 클라이언트에 연결하는 데 해당 수준만 있으면 됩니다. 관리자는 loA가 일관성이 있는지 확인할 수 있습니다.

시나리오 예

  1. Max Age는 1단계 조건에 대해 300초로 구성됩니다.
  2. acr을 요청하지 않고 로그인 요청이 전송됩니다. 수준 1이 사용되며 사용자는 사용자 이름과 암호로 인증해야 합니다. 토큰에 acr=1 이 있습니다.
  3. 100초 후에 다른 로그인 요청이 전송됩니다. SSO로 인해 사용자가 자동으로 인증되고 토큰에 acr=1 이 반환됩니다.
  4. 또 다른 로그인 요청은 201초 후에 전송됩니다(2번 인증 이후 301초). SSO로 인해 사용자가 자동으로 인증되지만 수준 1이 만료된 것으로 간주되므로 토큰에서 acr=0 을 반환합니다.
  5. 다른 로그인 요청이 전송되었지만 이제 claim 매개변수에서 ACR의 레벨 1을 명시적으로 요청합니다. 사용자에게 사용자 이름/암호로 다시 인증하라는 메시지가 표시되고 acr=1 은 토큰에 반환됩니다.

토큰의 ACR 클레임

ACR 클레임은 acr 클라이언트 범위에 정의된 acr loa 수준 프로토콜 매퍼에 의해 토큰에 추가됩니다. 이 클라이언트 범위는 영역 기본 클라이언트 범위이므로 해당 영역의 새로 생성된 모든 클라이언트에 추가됩니다.

토큰 내에 acr 클레임을 사용하지 않거나 이를 추가하기 위한 사용자 지정 논리가 필요한 경우 클라이언트에서 클라이언트 범위를 제거할 수 있습니다.

로그인 요청이 필수 클레임으로 acr 을 요청하는 claims 매개변수를 사용하여 요청을 시작하는 경우 Red Hat Single Sign-On은 항상 지정된 수준 중 하나를 반환합니다. 지정된 수준 중 하나를 반환할 수 없는 경우(예: 요청된 수준이 인증 흐름에서 구성된 조건보다 알 수 없거나 큰 경우) Red Hat Single Sign-On에서 오류가 발생합니다.

8.3.5. 사용자 세션 제한 구성

사용자가 구성할 수 있는 세션 수에 대한 제한입니다. 세션은 영역별로 제한되거나 클라이언트별로 제한될 수 있습니다.

흐름에 세션 제한을 추가하려면 다음 단계를 수행합니다.

  1. 흐름에 대한 실행 추가 를 클릭합니다.
  2. 항목 목록에서 사용자 세션 개수 제한자를 선택합니다.
  3. 저장을 클릭합니다.
  4. User Session Count Limiter 인증 유형에 대해 필요한 것을 클릭하여 요구 사항을 required로 설정합니다.
  5. User Session Count Limiter 에 대한 작업을 클릭합니다.
  6. Config 를 클릭합니다.
  7. 이 구성의 별칭을 입력합니다.
  8. 사용자가 이 영역에 보유할 수 있는 필요한 최대 세션 수를 입력합니다. 값이 0이면 이 검사가 비활성화됩니다.
  9. 사용자가 클라이언트에 보유할 수 있는 필요한 최대 세션 수를 입력합니다. 값이 0이면 이 검사가 비활성화됩니다.
  10. 제한에 도달한 후 사용자가 세션을 만들려고 할 때 필요한 동작을 선택합니다. 사용 가능한 bahaviors는 다음과 같습니다.

    Deny new session - when a new session is requested and the session limit is reached, no new sessions can be created.
    Terminate oldest session - when a new session is requested and the session limit has been reached, the oldest session will be removed and the new session created.
  11. 제한에 도달하면 표시할 사용자 정의 오류 메시지를 추가합니다.

사용자 세션 제한은 바인딩된 browsers 흐름,직접 부여 흐름 ,자격 증명 재설정 및 구성된 모든 ID 공급자의 후 로그인 흐름에 추가해야 합니다. 현재 관리자는 서로 다른 구성 간의 일관성을 유지 관리합니다.

CIBA에서는 사용자 세션 제한 기능을 사용할 수 없습니다.

8.4. Kerberos

Red Hat Single Sign-On은 SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism) 프로토콜을 통해 Kerberos 티켓으로 로그인을 지원합니다. 사용자가 세션을 인증한 후 웹 브라우저를 통해 투명하게 인증합니다. 웹이 아닌 경우 또는 로그인 중에 티켓을 사용할 수 없는 경우 Red Hat Single Sign-On은 Kerberos 사용자 이름 및 암호를 사용한 로그인을 지원합니다.

웹 인증의 일반적인 사용 사례는 다음과 같습니다.

  1. 사용자가 데스크탑에 로그인합니다.
  2. 사용자는 브라우저를 사용하여 Red Hat Single Sign-On에서 보호한 웹 애플리케이션에 액세스합니다.
  3. 애플리케이션이 Red Hat Single Sign-On 로그인으로 리디렉션됩니다.
  4. Red Hat Single Sign-On은 HTML 로그인 화면을 401 및 HTTP 헤더 WWW-Authenticate: Negotiate로 렌더링합니다.
  5. 브라우저에 데스크탑 로그인에서 Kerberos 티켓이 있는 경우 브라우저는 데스크탑 로그인 정보를 Red Hat Single Sign-On 헤더 Authorization: Negotiate 'spnego-token' 로 전송합니다. 그렇지 않으면 표준 로그인 화면이 표시되고 사용자는 로그인 자격 증명을 입력합니다.
  6. Red Hat Single Sign-On은 브라우저의 토큰을 검증하고 사용자를 인증합니다.
  7. LDAPFederationProvider를 Kerberos 인증 지원과 함께 사용하는 경우 Red Hat Single Sign-On은 LDAP의 사용자 데이터를 프로비저닝합니다. KerberosFederationProvider를 사용하는 경우 Red Hat Single Sign-On을 통해 사용자가 프로필을 업데이트하고 로그인 데이터를 미리 채울 수 있습니다.
  8. Red Hat Single Sign-On이 애플리케이션으로 돌아갑니다. Red Hat Single Sign-On 및 애플리케이션은 OpenID Connect 또는 SAML 메시지를 통해 통신합니다. Red Hat Single Sign-On은 Kerberos/SPNEGO 로그인에 대한 브로커 역할을 합니다. 따라서 Kerberos를 통한 Red Hat Single Sign-On 인증은 애플리케이션에서 숨겨집니다.

Kerberos 인증을 설정하려면 다음 단계를 수행합니다.

  1. Kerberos 서버(KDC)의 설정 및 구성
  2. Red Hat Single Sign-On 서버의 설정 및 구성
  3. 클라이언트 시스템의 설정 및 구성

8.4.1. Kerberos 서버 설정

Kerberos 서버를 설정하는 단계는 운영 체제(OS) 및 Kerberos 벤더에 따라 다릅니다. Kerberos 서버 설정 및 구성에 대한 지침은 Windows Active Directory, MIT Kerberos 및 OS 설명서를 참조하십시오.

설치하는 동안 다음 단계를 수행합니다.

  1. Kerberos 데이터베이스에 일부 사용자 주체를 추가합니다. Kerberos를 LDAP와 통합할 수도 있으므로 사용자 계정은 LDAP 서버에서 프로비저닝합니다.
  2. "HTTP" 서비스에 대한 서비스 주체를 추가합니다. 예를 들어 Red Hat Single Sign-On 서버가 www.mydomain.org 에서 실행되는 경우 서비스 주체 HTTP/www.mydomain.org@<kerberos 영역>을 추가합니다.

    MIT Kerberos에서는 "kadmin" 세션을 실행합니다. MIT Kerberos가 있는 시스템에서는 다음 명령을 사용할 수 있습니다.

sudo kadmin.local

그런 다음 HTTP 주체를 추가하고 다음과 같은 명령을 사용하여 키를 키 탭 파일에 내보냅니다.

addprinc -randkey HTTP/www.mydomain.org@MYDOMAIN.ORG
ktadd -k /tmp/http.keytab HTTP/www.mydomain.org@MYDOMAIN.ORG

Red Hat Single Sign-On이 실행 중인 호스트에서 키 탭 파일 /tmp/http.keytab 에 액세스할 수 있는지 확인합니다.

8.4.2. Red Hat Single Sign-On 서버 설정 및 구성

시스템에 Kerberos 클라이언트를 설치합니다.

절차

  1. Kerberos 클라이언트를 설치합니다. 시스템에서 Fedora, Ubuntu 또는 RHEL을 실행하는 경우 Kerberos 클라이언트 및 기타 유틸리티가 포함된 freeipa-client 패키지를 설치합니다.
  2. Kerberos 클라이언트를 구성합니다(Linux에서 구성 설정은 /etc/krb5.conf 파일에 있음).

    Kerberos 영역을 구성에 추가하고 서버가 실행되는 HTTP 도메인을 구성합니다.

    예를 들어 MYDOMAIN.ORG 영역의 경우 다음과 같이 domain_realm 섹션을 구성할 수 있습니다.

    [domain_realm]
      .mydomain.org = MYDOMAIN.ORG
      mydomain.org = MYDOMAIN.ORG
  3. HTTP 주체를 사용하여 keytab 파일을 내보내고 Red Hat Single Sign-On 서버를 실행하는 프로세스에서 파일에 액세스할 수 있는지 확인합니다. 프로덕션의 경우 이 프로세스에서만 파일을 읽을 수 있는지 확인합니다.

    위의 MIT Kerberos 예제의 경우 keytab을 /tmp/http.keytab 파일로 내보냈습니다. KMS (Key Distribution Center) 와 Red Hat Single Sign-On이 동일한 호스트에서 실행되는 경우 해당 파일을 이미 사용할 수 있습니다.

8.4.2.1. >-<EGO 처리 활성화

기본적으로 Red Hat Single Sign-On은>-<EGO 프로토콜 지원을 비활성화합니다. 이를 활성화하려면 브라우저 흐름으로 이동하여 Kerberos 를 활성화합니다.

브라우저 흐름

Browser Flow

Kerberos 요구 사항을 disabled 에서 alternative (Kerberos는 선택 사항)로 설정하거나 필수 (브라우더는 Kerberos가 활성화되어 있어야 함)를 설정합니다. iPXEEGO 또는 Kerberos로 작동하도록 브라우저를 구성하지 않은 경우 Red Hat Single Sign-On은 일반 로그인 화면으로 대체됩니다.

8.4.2.2. Kerberos 사용자 스토리지 페더스 설정

이제 User Storage 페더레이션 을 사용하여 Red Hat Single Sign-On이 Kerberos 티켓을 해석하는 방법을 구성해야 합니다. Kerberos 인증 지원을 사용하는 두 가지 페더레이션 공급자가 있습니다.

LDAP 서버가 지원하는 Kerberos로 인증하려면 LDAP 페더레이션 공급자를 구성합니다.

절차

  1. LDAP 공급자의 구성 페이지로 이동합니다.

    LDAP kerberos 통합

    LDAP Kerberos Integration

  2. Allow Kerberos authentication to ON(Kerberos 인증 허용)

Kerberos 인증을 허용하면 Red Hat Single Sign-On이 Kerberos 사용자 정보에 액세스하여 정보를 Red Hat Single Sign-On 환경으로 가져올 수 있습니다.

LDAP 서버가 Kerberos 솔루션을 백업하지 않는 경우 Kerberos 사용자 스토리지 페더레이션 공급자를 사용하십시오.

절차

  1. 메뉴에서 User Federation 을 클릭합니다.
  2. 공급자 추가 선택 상자에서 Kerberos 를 선택합니다.

    Kerberos 사용자 스토리지 공급자

    Kerberos User Storage Provider

Kerberos 공급자는 간단한 사용자 정보에 대한 Kerberos 티켓을 구문 분석하고 해당 정보를 로컬 Red Hat Single Sign-On 데이터베이스로 가져옵니다. 사용자 프로필 정보(예: 이름, 성, 이메일)는 프로비저닝되지 않습니다.

8.4.3. 클라이언트 시스템 설정 및 구성

클라이언트 시스템에는 Kerberos 클라이언트가 있어야 하며 위에 설명된 대로 10.0.0.15.conf 를 설정해야 합니다. 클라이언트 머신은 브라우저에서도 10.0.0.1EGO 로그인 지원을 활성화해야 합니다. Firefox 브라우저를 사용하는 경우 Kerberos용 Firefox 구성을 참조하십시오.

.mydomain.org URI는 network.negotiate-auth.trusted-uris 구성 옵션에 있어야 합니다.

Windows 도메인에서 클라이언트는 구성을 조정할 필요가 없습니다. Internet Explorer 및 Edge는 이미 SelectEGO 인증에 참여할 수 있습니다.

8.4.4. 인증 정보 위임

Kerberos는 자격 증명 위임을 지원합니다. 애플리케이션은 Kerberos 티켓으로 보호되는 다른 서비스와 상호 작용하기 위해 다시 사용할 수 있도록 Kerberos 티켓에 액세스해야 할 수 있습니다. Red Hat Single Sign-On 서버에서 ChronyEGO 프로토콜을 처리했기 때문에 GSS 인증 정보를 OpenID Connect 토큰 클레임 또는 SAML 어설션 특성 내에서 애플리케이션에 전파해야 합니다. Red Hat Single Sign-On은 이를 Red Hat Single Sign-On 서버에서 애플리케이션에 전송합니다. 이 클레임을 토큰 또는 어설션에 삽입하려면 각 애플리케이션에서 기본 제공 프로토콜 매퍼 위임 자격 증명을 활성화해야 합니다. 이 매퍼는 애플리케이션 클라이언트 페이지의 Mappers 탭에서 사용할 수 있습니다. 자세한 내용은 프로토콜 맵퍼 장을 참조하십시오.

애플리케이션은 다른 서비스에 대해 GSS를 호출하기 전에 Red Hat Single Sign-On에서 수신하는 클레임을 역직렬화해야 합니다. 액세스 토큰에서 GSSCredential 오브젝트로 인증 정보를 역직렬화할 때 이 인증 정보를 사용하여 GSSContext를 GSSManager.createContext 메서드로 전달합니다. 예를 들면 다음과 같습니다.

// Obtain accessToken in your application.
KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) servletReq.getUserPrincipal();
AccessToken accessToken = keycloakPrincipal.getKeycloakSecurityContext().getToken();

// Retrieve Kerberos credential from accessToken and deserialize it
String serializedGssCredential = (String) accessToken.getOtherClaims().
    get(org.keycloak.common.constants.KerberosConstants.GSS_DELEGATION_CREDENTIAL);

GSSCredential deserializedGssCredential = org.keycloak.common.util.KerberosSerializationUtils.
    deserializeCredential(serializedGssCredential);

// Create GSSContext to call other Kerberos-secured services
GSSContext context = gssManager.createContext(serviceName, krb5Oid,
    deserializedGssCredential, GSSContext.DEFAULT_LIFETIME);
참고

10.0.0.1 5.conf 파일에서 전달 가능한 Kerberos 티켓을 구성하고 브라우저에 위임된 자격 증명에 대한 지원을 추가합니다.

주의

인증 정보 위임에는 보안에 미치는 영향이 있으므로 필요한 경우에만 HTTPS를 사용합니다. 자세한 내용과 예는 이 문서를 참조하십시오.

8.4.5. Cross-realm trust

Kerberos 프로토콜에서 영역은 Kerberos 사용자 집합입니다. 이러한 주체의 정의는 일반적으로 LDAP 서버인 Kerberos 데이터베이스에 있습니다.

Kerberos 프로토콜은 교차 영역 신뢰를 허용합니다. 예를 들어, 2개의 Kerberos 영역인 A 및 B가 존재하는 경우 교차 영역 신뢰를 통해 영역 A에서 영역 B의 리소스에 액세스할 수 있습니다. 영역 B는 영역 A를 신뢰합니다.

Kerberos cross-realm trust

kerberos trust basic

Red Hat Single Sign-On 서버는 교차 영역 신뢰를 지원합니다. 이를 구현하려면 다음을 수행합니다.

  • 교차 영역 신뢰를 위해 Kerberos 서버를 구성합니다. 이 단계를 구현하는 것은 Kerberos 서버 구현에 따라 달라집니다. 이 단계는 Kerberos 주체 A 및 B의 Kerberos 데이터베이스에 Kerberos 사용자 지정 gt/B@A 를 추가해야 합니다. 이 주체는 두 Kerberos 영역 모두에서 동일한 키가 있어야 합니다. 보안 주체는 두 영역에 모두 동일한 암호, 키 버전 번호 및 암호가 있어야 합니다. 자세한 내용은 Kerberos 서버 설명서를 참조하십시오.
참고

교차 영역 신뢰는 기본적으로 단방향입니다. 영역 A와 영역 B 간의 양방향 신뢰를 위해 Kerberos 데이터베이스에 두 개의 Kerberos 데이터베이스에 보안 주체를 추가해야 합니다. 그러나 신뢰는 기본적으로 전송됩니다. 영역 B가 영역 A와 영역 C가 영역 B를 신뢰하는 경우 realm C는 보안 주체 없이 A 영역 A 를 신뢰하면 사용 가능합니다. 클라이언트가 신뢰 경로를 찾을 수 있도록 Kerberos 클라이언트 측에서 추가 구성(예: capaths)이 필요할 수 있습니다. 자세한 내용은 Kerberos 설명서를 참조하십시오.

  • Red Hat Single Sign-On 서버 구성

    • Kerberos 지원이 포함된 LDAP 스토리지 공급자를 사용하는 경우 HTTP/mydomain.com@B 예제와 같이 영역 B에 대한 서버 주체를 구성합니다. LDAP 서버는 A 영역의 사용자가 Red Hat Single Sign-On에 성공적으로 인증하려는 경우 Red Hat Single Sign-On에 성공적으로 인증할 수 있는 경우, Red Hat Single Sign-On에서 gRPCEGO 흐름을 수행한 다음 사용자를 찾아야 하므로 A 영역에서 사용자를 찾아야 합니다.

사용자를 찾는 것은 LDAP 스토리지 공급자 옵션 Kerberos 주체 속성을 기반으로 합니다. userPrincipalName 과 같은 값이 있는 인스턴스에 대해 구성된 경우, john@A ; 사용자 john@A )의 CryostatEGO 인증 후 Red Hat Single Sign-On은 john@A 와 동등한 userPrincipalName 특성을 사용하여 LDAP 사용자를 조회하려고 합니다. Kerberos 주체 속성이 비어 있으면 Red Hat Single Sign-On은 해당 영역을 생략한 kerberos 주체 접두사를 기반으로 LDAP 사용자를 조회합니다. 예를 들어 Kerberos 주체 사용자 john@A 는 사용자 이름 john 아래의 LDAP에서 사용할 수 있어야 하므로 일반적으로 uid= john,ou=People,dc=example,dc=com 과 같은 LDAP DN에서 사용할 수 있습니다. 영역 A 및 B의 사용자가 인증하도록 하려면 LDAP에서 A 영역 A와 B의 사용자를 모두 찾을 수 있는지 확인합니다.

  • Kerberos 사용자 스토리지 공급자(일반적으로 LDAP 통합이 없는 Kerberos)를 사용하는 경우 서버 주체를 HTTP/mydomain.com@B 로 구성하고 Kerberos 영역 A 및 B의 사용자는 인증할 수 있어야 합니다.

여러 Kerberos 영역의 사용자는 모든 사용자에게 인증에 사용되는 kerberos 주체를 참조하는 KERBEROS_PRINCIPAL 속성이 있으므로 인증할 수 있으며, 이는 이 사용자를 추가로 조회하는 데 사용됩니다. kerberos 영역 AB 모두에 사용자 john 이 있는 경우 충돌을 방지하기 위해 Red Hat Single Sign-On 사용자의 사용자 이름에 kerberos 영역이 소문자로 포함될 수 있습니다. 예를 들어 사용자 이름은 john@a 입니다. 구성된 Kerberos 영역과 realm이 일치하는 경우에만 realm 접미사가 생성된 사용자 이름에서 생략될 수 있습니다. 예를 들어 Kerberos 공급자에서 Kerberos 영역을 구성하는 경우 Kerberos 주체 john @ A 의 사용자 이름은 john입니다.

8.4.6. 문제 해결

문제가 있는 경우 추가 로깅을 활성화하여 문제를 디버깅합니다.

  • Kerberos 또는 LDAP 페더레이션 공급자를 위한 관리 콘솔에서 디버그 플래그 활성화
  • org.keycloak 카테고리에 대한 TRACE 로깅을 활성화하여 서버 로그에서 자세한 정보를 수신할 수 있습니다.
  • 시스템 속성 추가 -Dsun.security.krb5.debug=true-Dsun.security.spnego.debug=true

8.5. X.509 클라이언트 인증서 사용자 인증

Red Hat Single Sign-On은 상호 SSL 인증을 사용하도록 서버를 구성한 경우 X.509 클라이언트 인증서로 로그인할 수 있도록 지원합니다.

일반적인 워크플로:

  • 클라이언트는 SSL/TLS 채널을 통해 인증 요청을 보냅니다.
  • SSL/TLS 핸드셰이크 동안 서버와 클라이언트는 x.509/v3 인증서를 교환합니다.
  • 컨테이너(JBoss EAP)는 인증서 PKIX 경로와 인증서 만료 날짜를 검증합니다.
  • X.509 클라이언트 인증서 인증 고객은 다음 방법을 사용하여 클라이언트 인증서의 유효성을 검사합니다.

    • CRL 또는 CRL 배포 포인트를 사용하여 인증서 해지 상태를 확인합니다.
    • OCSP(Online Certificate Status Protocol)를 사용하여 인증서 해지 상태를 확인합니다.
    • 인증서의 키가 예상 키와 일치하는지 확인합니다.
    • 인증서의 확장 키가 예상 확장 키와 일치하는지 확인합니다.
  • 이러한 검사 중 하나라도 실패하면 x.509 인증이 실패합니다. 그렇지 않으면 인증자가 인증서 ID를 추출하여 기존 사용자에게 매핑합니다.

인증서가 기존 사용자에게 매핑되면 인증 흐름에 따라 동작이 달라집니다.

  • 브라우저 흐름에서 서버는 사용자에게 ID를 확인하거나 사용자 이름 및 암호를 사용하여 로그인하라는 메시지를 표시합니다.
  • 직접 권한 부여 흐름에서 서버는 사용자에게 서명합니다.
중요

웹 컨테이너는 인증서 PKIX 경로를 검증해야 합니다. Red Hat Single Sign-On 측의 X.509 인증기는 인증서 만료, 인증서 해지 상태 및 주요 사용량을 확인하는 추가 지원만 제공합니다. 역방향 프록시 뒤에 배포된 Red Hat Single Sign-On을 사용하는 경우 PKIX 경로의 유효성을 확인하도록 역방향 프록시가 구성되어 있는지 확인합니다. 역방향 프록시를 사용하지 않고 JBoss EAP에 직접 액세스하는 사용자를 사용하지 않는 경우 아래에 설명된 대로 PKIX 경로를 확인하는 동안 JBoss EAP를 통해 PKIX 경로를 검증해야 합니다.

8.5.1. 기능

지원되는 인증서 ID 소스:

  • 정규 표현식을 사용하여 SubjectDN 일치
  • X500 Subject의 email 특성
  • 주체 대체 이름 확장 (RFC822Name 일반 이름)에서 X500 주체의 이메일
  • X500 Subject의 다른 이름: Subject Alternative Name Extension. 이 다른 이름은 일반적으로 UPN(User Principal Name)입니다.
  • X500 주체의 일반적인 이름 특성
  • 정규식을 사용하여 IssuerDN 일치
  • 인증서 일련 번호
  • 인증서 일련 번호 및 IssuerDN
  • SHA-256 인증서 지문
  • PEM 형식의 전체 인증서
8.5.1.1. 정규 표현식

Red Hat Single Sign-On은 정규식을 필터로 사용하여 Subject DN 또는 Issuer DN에서 인증서 ID를 추출합니다. 예를 들어 이 정규식은 email 특성과 일치합니다.

emailAddress=(.*?)(?:,|$)

정규식 필터링은 ID 소스가 정규식 사용하여 일치하는 SubjectDN 또는 정규식을 사용하여 일치 IssuerDN 으로 설정된 경우 적용됩니다.

8.5.1.1.1. 기존 사용자에게 인증서 ID 매핑

인증서 ID 매핑은 추출된 사용자 ID를 인증서 ID와 일치하는 기존 사용자의 사용자 이름, 이메일 또는 사용자 지정 속성에 매핑할 수 있습니다. 예를 들어 ID 소스를 주체의 이메일 또는 사용자 매핑 방법으로 설정하면 X.509 클라이언트 인증서가 인증서 주체 DN의 email 속성을 사용자 이름별로 검색할 때 검색 기준으로 사용합니다.

중요
  • 영역 설정에서 이메일로 로그인을 비활성화하면 인증서 인증에 동일한 규칙이 적용됩니다. 사용자는 email 속성을 사용하여 로그인할 수 없습니다.
  • 인증서 일련 번호 및 IssuerDN 을 ID 소스로 사용하려면 일련 번호와 IssuerDN에 대한 두 가지 사용자 지정 속성이 필요합니다.
  • SHA-256 인증서 지문은 SHA-256 인증서 지문 의 소문자 16진수 표현입니다.
  • PEM 형식의 전체 인증서를 ID 소스로 사용하는 것은 LDAP와 같은 외부 페더레이션 소스에 매핑된 사용자 지정 속성으로 제한됩니다. Red Hat Single Sign-On은 길이 제한으로 인해 데이터베이스에 인증서를 저장할 수 없으므로 LDAP의 경우 항상 LDAP에서 항상 읽기 값을 활성화해야 합니다.
8.5.1.1.2. 확장 인증서 검증
  • CRL을 사용한 해지 상태 점검.
  • CRL/Distribution Point를 사용한 해지 상태 검사
  • OCSP/Responder URI를 사용한 해지 상태 검사
  • 인증서 키Usage 검증입니다.
  • 인증서 ExtendedKeyUsage 검증.

8.5.2. X.509 클라이언트 인증서 사용자 인증 활성화

다음 섹션에서는 X.509 클라이언트 인증서 인증을 활성화하기 위해 JBoss EAP/Undertow 및 Red Hat Single Sign-On 서버를 구성하는 방법을 설명합니다.

8.5.2.1. JBoss EAP에서 상호 SSL 활성화

JBoss EAP에서 SSL을 활성화하는 방법은 SSL 사용을 참조하십시오.

  • RHSSO_HOME/standalone/configuration/standalone.xml을 열고 새 영역을 추가합니다.
<security-realms>
    <security-realm name="ssl-realm">
        <server-identities>
            <ssl>
                <keystore path="servercert.jks"
                          relative-to="jboss.server.config.dir"
                          keystore-password="servercert password"/>
            </ssl>
        </server-identities>
        <authentication>
            <truststore path="truststore.jks"
                        relative-to="jboss.server.config.dir"
                        keystore-password="truststore password"/>
        </authentication>
    </security-realm>
</security-realms>
ssl/keystore
ssl 요소에는 JKS 키 저장소 에서 서버 공개 키 쌍을 로드하기 위한 세부 정보가 포함된 키 저장소 요소가 포함되어 있습니다.
ssl/keystore/path
JKS 키 저장소의 경로입니다.
ssl/keystore/relative-to
키 저장소 경로가 상대 경로인 경로입니다.
ssl/keystore/keystore-password
키 저장소를 여는 암호입니다.
SSL/키store/alias (선택 사항)
키 저장소의 항목 별칭입니다. 키 저장소에 여러 항목이 포함된 경우 설정됩니다.
SSL/keystore/key-password (선택 사항)
키 저장소 암호와 다른 경우 개인 키 암호입니다.
authentication/truststore
인바운드/outgoing 연결의 원격 측에서 제공하는 인증서를 확인하기 위해 신뢰 저장소를 로드하는 방법을 정의합니다. 일반적으로 신뢰 저장소에는 신뢰할 수 있는 CA 인증서 컬렉션이 포함되어 있습니다.
authentication/truststore/path
신뢰할 수 있는 인증 기관의 인증서가 포함된 JKS 키 저장소의 경로입니다.
authentication/truststore/relative-to
신뢰 저장소 경로가 상대적인 경로입니다.
authentication/truststore/keystore-password
신뢰 저장소를 여는 암호입니다.
8.5.2.2. HTTPS 리스너 활성화

WildFly에서 HTTPS를 활성화하는 방법은 HTTPS Listener 를 참조하십시오.

  • <https-listener> 요소를 추가합니다.
<subsystem xmlns="urn:jboss:domain:undertow:12.0">
	....
    <server name="default-server">
	    <https-listener name="default"
                        socket-binding="https"
                        security-realm="ssl-realm"
                        verify-client="REQUESTED"/>
    </server>
</subsystem>
https-listener/security-realm
이 값은 이전 섹션의 영역 이름과 일치해야 합니다.
https-listener/verify-client
REQUESTED 로 설정하면 서버에서 필요한 경우 클라이언트 인증서를 요청합니다. REQUIRED 로 설정하면 클라이언트 인증서가 제공되지 않은 경우 서버에서 인바운드 연결을 거부합니다.

8.5.3. 브라우저 흐름에 X.509 클라이언트 인증서 인증 추가

  1. 메뉴에서 인증을 클릭합니다.
  2. "Forwardedr" 흐름을 클릭합니다.
  3. 복사를 클릭하여 내장된 "LoadBalancerr" 흐름의 사본을 만듭니다.
  4. 복사의 이름을 입력합니다.
  5. 확인을 클릭합니다.
  6. 정책 추가 드롭다운 상자에서 사본을 클릭합니다.
  7. 실행 추가를 클릭합니다.
  8. "X509/Validate Username Form"을 클릭합니다.
  9. 저장을 클릭합니다.

    X509 실행

    X509 Execution

  10. 위쪽/다운 화살표 버튼을 클릭하여 'X509/Validate Username Form'을 이동합니다.
  11. 요구 사항을 "ALTERNATIVE"로 설정합니다.

    X509 브라우저 흐름

    X509 Browser Flow

  12. 바인딩 탭을 클릭합니다.
  13. browsers flow 드롭다운 목록을 클릭합니다.
  14. 드롭다운 목록에서 브라우저 흐름의 사본을 클릭합니다.
  15. 저장을 클릭합니다.

    X509 브라우저 흐름 바인딩

    X509 Browser Flow Bindings

8.5.4. X.509 클라이언트 인증서 인증 구성

X509 구성

X509 Configuration

사용자 ID 소스
클라이언트 인증서에서 사용자 ID를 추출하는 방법을 정의합니다.
표준 DN 표현 활성화
정식 형식을 사용하여 고유 이름을 결정할지 여부를 정의합니다. 공식 Java API 문서에서는 형식을 설명합니다. 이 옵션은 정규식을 사용하는 두 개의 User Identity Sources Match SubjectDN과 정규식 만 사용하여 일치 IssuerDN 에 영향을 줍니다. 새 Red Hat Single Sign-On 인스턴스를 설정하는 경우 이 옵션을 활성화합니다. 기존 Red Hat Single Sign-On 인스턴스와 이전 버전과의 호환성을 유지하려면 이 옵션을 비활성화합니다.
일련 번호 16진수 표시 활성화
일련 번호를 16진수로 나타냅니다. 부호 비트가 1로 설정된 일련 번호는 00 색으로 채워집니다. 예를 들어 10진수 값이 161 인 일련번호 또는 16진수 표현의 a1 은 RFC5280에 따라 00a1 로 인코딩됩니다. 자세한 내용은 RFC5280, appendix-B 를 참조하십시오.
정규 표현식
인증서 ID를 추출하는 필터로 사용할 정규식입니다. 식에는 단일 그룹이 포함되어야 합니다.
사용자 매핑 방법
기존 사용자와 인증서 ID를 일치시키는 메서드를 정의합니다. 사용자 이름 또는 이메일 은 사용자 이름 또는 이메일을 통해 기존 사용자를 검색합니다. 사용자 정의 속성 맵퍼는 인증서 ID와 일치하는 사용자 지정 속성을 사용하여 기존 사용자를 검색합니다. 사용자 정의 속성의 이름은 구성할 수 있습니다.
사용자 속성의 이름
인증서 ID와 일치하는 사용자 정의 속성입니다. 속성 매핑이 여러 값과 관련된 경우 여러 사용자 지정 속성을 사용합니다(예: 'Certificate Serial Number 및 IssuerDN').
CRL 검사 활성화됨
인증서 해지 목록을 사용하여 인증서 해지 상태를 확인합니다. 목록의 위치는 CRL 파일 경로 속성에 정의되어 있습니다.
CRL 배포 포인트에서 인증서 해지 상태를 확인할 수 있습니다.
CDP를 사용하여 인증서 해지 상태를 확인합니다. 대부분의 PKI 기관에는 인증서에 CDP가 포함됩니다.
CRL 파일 경로
CRL 목록이 포함된 파일의 경로입니다. CRL Checking Enabled 옵션이 활성화된 경우 값은 유효한 파일의 경로여야 합니다.
OCSP 검사 활성화
온라인 인증서 상태 프로토콜을 사용하여 인증서 해지 상태를 확인합니다.
OCSP Fail-Open vsphere
기본적으로 OCSP 검사는 성공적인 인증을 계속 진행하기 위해 양수 응답을 반환해야 합니다. 그러나 경우에 따라 이 검사에 불일치할 수 있습니다. 예를 들어 OCSP 서버에 연결할 수 없거나 과부하되거나 클라이언트 인증서에 OCSP 응답자 URI가 포함되지 않을 수 있습니다. 이 설정을 설정하면 OCSP 응답자가 명시적인 음수 응답이 수신되고 인증서가 명확하게 취소되는 경우에만 인증이 거부됩니다. 유효한 OCSP 응답이 유효하지 않은 경우 인증 시도가 수락됩니다.
OCSP 반응기 URI
인증서의 OCSP 응답자 URI 값을 재정의합니다.
키 사용량 검증
인증서의 KeyUsage 확장 비트가 설정되어 있는지 확인합니다. 예를 들어 "digitalSignature,KeyEncipherment"는 KeyUsage 확장에서 비트 0 및 2가 설정되어 있는지 확인합니다. Key Usage 검증을 비활성화하려면 이 매개변수를 비워 둡니다. 자세한 내용은 RFC5280, Section-4.2.1.3 을 참조하십시오. Red Hat Single Sign-On은 주요 사용량 불일치가 발생할 때 오류가 발생합니다.
확장된 키 사용량 검증
확장 키 사용량 확장에 정의된 하나 이상의 용도를 확인합니다. 자세한 내용은 RFC5280, Section-4.2.1.12 을 참조하십시오. Extended Key Usage 검증을 비활성화하려면 이 매개변수를 비워 둡니다. Red Hat Single Sign-On은 발급된 CA의 문제로 플래그가 지정되면 오류가 발생하고 주요 사용량 확장 불일치가 발생합니다.
인증서 정책 검증
인증서 정책 확장에 정의된 하나 이상의 정책 OID를 확인합니다. RFC5280, Section-4.2.1.4 를 참조하십시오. 인증서 정책 검증을 비활성화하려면 매개변수를 비워 둡니다. 여러 정책을 쉼표로 구분해야 합니다.
인증서 정책 유효성 검사 모드
검증 인증서 정책 설정에 둘 이상의 정책이 지정되면 일치에서 모든 요청된 정책이 존재하는지 아니면 하나의 일치가 성공적인 인증을 위해 충분한지 여부를 결정합니다. 기본값은 모두 입니다. 즉, 요청된 모든 정책이 클라이언트 인증서에 있어야 합니다.
ID 확인 우회
활성화된 경우 X.509 클라이언트 인증서 인증이 사용자에게 인증서 ID를 확인하라는 메시지를 표시하지 않습니다. 성공적인 인증 시 사용자에게 Red Hat Single Sign-On 서명.
클라이언트 인증서 재검사
설정되어 있는 경우 클라이언트 인증서 신뢰 체인은 구성된 신뢰 저장소에 있는 인증서를 사용하여 애플리케이션 수준에서 항상 확인합니다. 이는 기본 웹 서버가 클라이언트 인증서 체인 검증을 적용하지 않는 경우, 예를 들어 평가되지 않은 로드 밸런서 또는 역방향 프록시 뒤에 있기 때문에 또는 허용되는 CA 수가 상호 SSL 협상에 비해 너무 큰 경우(대부분의 브라우저가 약 200개의 공개된 CA에 해당하는 최대 SSL 협상 패킷 크기를 제한함)할 때 유용할 수 있습니다. 기본적으로 이 옵션은 해제되어 있습니다.

8.5.5. 직접 권한 부여 흐름에 X.509 클라이언트 인증서 인증 추가

  1. 메뉴에서 인증을 클릭합니다.
  2. "Direct Grant" 흐름을 클릭합니다.
  3. 복사를 클릭하여 "Direct Grant" 흐름의 사본을 만듭니다.
  4. 복사의 이름을 입력합니다.
  5. 확인을 클릭합니다.
  6. "사용자 이름 유효성 검사"에 대한 Actions 링크를 클릭하고 삭제 를 클릭합니다.
  7. 삭제를 클릭합니다.
  8. "Password"에 대한 Actions 링크를 클릭하고 삭제 를 클릭합니다.
  9. 삭제를 클릭합니다.
  10. 실행 추가를 클릭합니다.
  11. "X509/Validate Username"을 클릭합니다.
  12. 저장을 클릭합니다.

    X509 직접 부여 실행

    X509 Direct Grant Execution

  13. x509 browser Flow 섹션에 설명된 단계에 따라 x509 인증 구성을 설정합니다.
  14. 바인딩 탭을 클릭합니다.
  15. Direct Grant Flow 드롭다운 목록을 클릭합니다.
  16. 새로 생성된 "x509 Direct Grant" 흐름을 클릭합니다.
  17. 저장을 클릭합니다.

    X509 직접 부여 흐름 바인딩

    X509 Direct Grant Flow Bindings

8.5.6. 클라이언트 인증서 조회

Red Hat Single Sign-On 서버에서 직접 HTTP 요청을 수신하면 JBoss EAP undertow 하위 시스템에서 SSL 핸드셰이크를 설정하고 클라이언트 인증서를 추출합니다. JBoss EAP는 서블릿 사양에 지정된 대로 클라이언트 인증서를 HTTP 요청의 javax.servlet.request.X509Certificate 속성에 저장합니다. Red Hat Single Sign-On X509 인증자는 이 특성에서 인증서를 조회할 수 있습니다.

그러나 Red Hat Single Sign-On 서버가 로드 밸런서 또는 역방향 프록시 뒤에서 HTTP 요청을 수신하면 프록시 서버가 클라이언트 인증서를 추출하고 상호 SSL 연결을 설정할 수 있습니다. 역방향 프록시는 일반적으로 인증된 클라이언트 인증서를 기본 요청의 HTTP 헤더에 배치합니다. 프록시는 요청을 백엔드 Red Hat Single Sign-On 서버로 전달합니다. 이 경우 Red Hat Single Sign-On은 HTTP 요청의 속성이 아닌 HTTP 헤더에서 X.509 인증서 체인을 조회해야 합니다.

Red Hat Single Sign-On이 역방향 프록시 뒤에 있는 경우 일반적으로 RHSSO_HOME/standalone/configuration/standalone.xml에서 x509cert-lookup SPI의 대체 공급자를 구성해야 합니다. HTTP 헤더 인증서를 검색하는 기본 공급자에서는 haproxyapache 라는 두 개의 추가 기본 제공 공급자가 있습니다.

중요

X.509 인증을 위한 프록시 헤더의 클라이언트 인증서 조회는 보안에 민감한 것으로 간주됩니다. 잘못 구성된 경우 위조된 클라이언트 인증서 헤더를 인증에 사용할 수 있습니다. 프록시 헤더를 통해 전달할 때 클라이언트 인증서 정보를 신뢰할 수 있도록 하려면 추가 예방 조치를 취해야 합니다.

  • 재암호화 또는 엣지 TLS 종료가 필요한지 확인합니다. 즉, 클라이언트 인증서 조회에 프록시 헤더를 사용합니다. TLS 패스스루는 프록시 헤더에서 인증서를 전달할 필요가 없기 때문에 X.509 인증이 필요한 경우 더 안전한 옵션으로 권장됩니다. 프록시 헤더의 클라이언트 인증서 조회는 재암호화 및 엣지 TLS 종료에만 적용됩니다.
  • passthrough가 옵션이 아닌 경우 다음 보안 조치를 구현합니다.

    • Red Hat Single Sign-On이 분리되고 프록시의 연결만 수락할 수 있도록 네트워크를 구성합니다.
    • 프록시가 sslClientCertsslCert CryostatPrefix 인수로 지정된 헤더와 같은 모든 관련 헤더를 덮어쓰는지 확인합니다.
8.5.6.1. HAProxy 인증서 조회 공급자

Red Hat Single Sign-On 서버가 HAProxy 역방향 프록시 뒤에 있는 경우 이 공급자를 사용합니다. 서버에 다음 구성을 사용합니다.

<spi name="x509cert-lookup">
    <default-provider>haproxy</default-provider>
    <provider name="haproxy" enabled="true">
        <properties>
            <property name="sslClientCert" value="SSL_CLIENT_CERT"/>
            <property name="sslCertChainPrefix" value="CERT_CHAIN"/>
            <property name="certificateChainLength" value="10"/>
        </properties>
    </provider>
</spi>

이 예제 구성에서 클라이언트 인증서는 HTTP 헤더, SSL_CLIENT_CERT 에서 검색되고, 체인의 다른 인증서는 NetRT_ CHAIN_0 ~ hieradataRT_ CHAIN_ 9 와 같은 HTTP 헤더에서 검색됩니다. 속성 certificateECDHELength는 체인 의 최대 길이이므로 마지막 속성은 ovirtRT _CHAIN_9 입니다.

클라이언트 인증서 및 클라이언트 인증서 체인에 대한 HTTP 헤더 구성에 대한 자세한 내용은 HAProxy 설명서를 참조하십시오.

8.5.6.2. Apache 인증서 조회 공급자

Red Hat Single Sign-On 서버가 Apache 역방향 프록시 뒤에 있는 경우 이 공급자를 사용할 수 있습니다. 서버에 다음 구성을 사용합니다.

<spi name="x509cert-lookup">
    <default-provider>apache</default-provider>
    <provider name="apache" enabled="true">
        <properties>
            <property name="sslClientCert" value="SSL_CLIENT_CERT"/>
            <property name="sslCertChainPrefix" value="CERT_CHAIN"/>
            <property name="certificateChainLength" value="10"/>
        </properties>
    </provider>
</spi>

이 구성은 haproxy 공급자와 동일합니다. 클라이언트 인증서 및 클라이언트 인증서 체인의 HTTP 헤더가 구성된 방법에 대한 자세한 내용은 mod_sslmod_headers 의 Apache 설명서를 참조하십시오.

8.5.6.3. NGINX 인증서 조회 공급자

Red Hat Single Sign-On 서버가 NGINX 역방향 프록시 뒤에 있는 경우 이 공급자를 사용할 수 있습니다. 서버에 다음 구성을 사용합니다.

<spi name="x509cert-lookup">
    <default-provider>nginx</default-provider>
    <provider name="nginx" enabled="true">
        <properties>
            <property name="sslClientCert" value="ssl-client-cert"/>
            <property name="sslCertChainPrefix" value="USELESS"/>
            <property name="certificateChainLength" value="2"/>
        </properties>
    </provider>
</spi>
참고

NGINX SSL/TLS 모듈은 클라이언트 인증서 체인을 노출하지 않습니다. Red Hat Single Sign-On의 NGINX 인증서 조회 공급자는 Keycloak 신뢰 저장소를 사용하여 다시 빌드합니다. 키tool CLI를 모든 루트 및 중간 CA의 클라이언트 인증서 체인을 다시 작성하여 Red Hat Single Sign-On 신뢰 저장소를 채웁니다.

클라이언트 인증서에 대한 HTTP 헤더 구성에 대한 자세한 내용은 NGINX 설명서를 참조하십시오.

NGINX 구성 파일의 예:

 ...
 server {
    ...
    ssl_client_certificate                  trusted-ca-list-for-client-auth.pem;
    ssl_verify_client                       optional_no_ca;
    ssl_verify_depth                        2;
    ...
    location / {
      ...
      proxy_set_header ssl-client-cert        $ssl_client_escaped_cert;
      ...
    }
    ...
}
참고

trusted-ca-list-for-client-auth.pem의 모든 인증서를 Keycloak 신뢰 저장소에 추가해야 합니다.

8.5.6.4. 기타 역방향 프록시 구현

Red Hat Single Sign-On은 다른 역방향 프록시 구현을 지원하지 않습니다. 그러나 apache 또는 haproxy 와 유사한 방식으로 다른 역방향 프록시가 작동하도록 할 수 있습니다. 이러한 작업이 없는 경우 org.keycloak.services.x509.X509ClientCertificateLookup Factory 및 org.keycloak.services.x509ClientCertificateLookup 공급자 구현을 생성합니다. 공급자를 추가하는 방법에 대한 자세한 내용은 서버 개발자 가이드를 참조하십시오.

8.5.7. 문제 해결

HTTP 헤더 덤프
역방향 프록시가 Keycloak으로 전송하는 내용을 보려면 RequestDumpingHandler filter를 활성화하고 server.log 파일을 참조합니다.
로깅 하위 시스템에서 TRACE 로깅 활성화
...
    <profile>
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
...
            <logger category="org.keycloak.authentication.authenticators.x509">
                <level name="TRACE"/>
            </logger>
            <logger category="org.keycloak.services.x509">
                <level name="TRACE"/>
            </logger>
주의

프로덕션에서 RequestDumpingHandler 또는 TRACE 로깅을 사용하지 마십시오.

X.509를 사용한 직접 권한 부여

이 인증을 수행하려면 다음이 필요합니다.

  • 루트 CA 및 중간 CA
  • 루트 CA/중간 CA로 서명된 사용자 서명된 인증서 요청

다음 템플릿을 사용하여 Resource Owner Password Credentials Grant를 사용하여 토큰을 요청할 수 있습니다.

$ LOC=<install-dir>/intermediate1/user-certificate

$ curl --insecure https://localhost:8443/auth/realms/X509_demo/protocol/openid-connect/token --data "grant_type=password" -E $LOC/user1.crt --key $LOC/user1.key --cacert $LOC/intermediate-ca-chain.crt -d client_id=account -d client_secret=BNm5AQPJGEtbayIAoiKUetr0lkXKSlF4 | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2097 100 2013 100 84 25481 1063 -::- -::- -::- 26544
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ1OUNpN0tzUjBIOEFCQXEtQ1Z4SEFDSUo1M1hNYWVhclJrYkw4cFd1VW4wIn0.eyJleHAiOjE2Njc4MzA5NjAsImlhdCI6MTY2NzgzMDY2MCwianRpIjoiNDU5YzE2OGMtODU3ZS00OWRjLTgxYjItZjVhM2M3M2MwODMzIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODQ0My9hdXRoL3JlYWxtcy9YNTA5X2RlbW8iLCJzdWIiOiIwODZiMTgyZC00MzdhLTQzZDItYTRmZS05ZGZmYTNmOTBiZDAiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJhY2NvdW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImMwYjNiMTJjLTM5YmEtNGQ0Ni1iNDNlLTZkMTM0MGJmNTA5OCIsImFjciI6IjEiLCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwcm9maWxlIGVtYWlsIiwic2lkIjoiYzBiM2IxMmMtMzliYS00ZDQ2LWI0M2UtNmQxMzQwYmY1MDk4IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ1c2VyMSIsImVtYWlsIjoidXNlckByZWRoYXQuY29tIn0.CDtltEkmITloDpqU5alq4U1JopqEJVeoglT-wA43edQ_DfeWSgefL0BIrPlt1SKhFMOVitwyq_9XZvfiS5ZiObE33cDmhr6eohbUtDPibU2GuEIYP9WjlVpZDMaSKQVu5SwM91m6yei22PtH-ApPOBeG4Ru0xZtNXjwGQpuIJEi_H1rZdPY3I4U2lPuQo4Uono5gnF7re_nUvf90FJi0uaOOrsvUhUkj1xEwQ0Diy1oIymcbrDL0Ek7B30StBcjn-fe3-0GpLttLQju0OGTkwD7Eb0UWTKoWAwspMlgpf9NaIGj8rmBsz6eBlGIGWBN2Qg6v3PzbJ2NXKvq435f9Zg",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyMmFkZDdhMy0xN2RjLTQ5NmQtYTk4NS05YWZhNGZhODVhMTEifQ.eyJleHAiOjE2Njc4MzI0NjAsImlhdCI6MTY2NzgzMDY2MCwianRpIjoiZWU4MjJhMzYtMWEzMS00ZGEzLWIxMGEtNmY1ODkxYmI0MzlhIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODQ0My9hdXRoL3JlYWxtcy9YNTA5X2RlbW8iLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdDo4NDQzL2F1dGgvcmVhbG1zL1g1MDlfZGVtbyIsInN1YiI6IjA4NmIxODJkLTQzN2EtNDNkMi1hNGZlLTlkZmZhM2Y5MGJkMCIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJhY2NvdW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImMwYjNiMTJjLTM5YmEtNGQ0Ni1iNDNlLTZkMTM0MGJmNTA5OCIsInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNpZCI6ImMwYjNiMTJjLTM5YmEtNGQ0Ni1iNDNlLTZkMTM0MGJmNTA5OCJ9.MubgR9rvyrmSOcaq5ce-qVTPenVQye1KsEHJr7nh9-A",
"token_type": "Bearer",
"not-before-policy": 0,
"session_state": "c0b3b12c-39ba-4d46-b43e-6d1340bf5098",
"scope": "profile email"
}
[host][:port]
원격 Red Hat Single Sign-On 서버의 호스트 및 포트 번호입니다.
user_cert.crt
사용자를 위한 공개 키입니다.
user_cert.key
사용자의 개인 키입니다. 이 키는 공개 키가 위조되지 않았는지 확인합니다. 개인 키는 공개 키와 동일한 해시를 가리킵니다.
CLIENT_ID
클라이언트 ID입니다.
CLIENT_SECRET
기밀 클라이언트의 경우 고객 시크릿입니다.

8.6. W3C 웹 인증(WebAuthn)

Red Hat Single Sign-On은 W3C 웹 인증(WebAuthn) 을 지원합니다. Red Hat Single Sign-On은 WebAuthn의 Relying Party(RP) 로 작동합니다.

참고

WebAuthn의 운영 성공 여부는 인증자, 브라우저 및 플랫폼을 지원하는 사용자의 WebAuthn에 따라 다릅니다. 인증자, 브라우저 및 플랫폼이 WebAuthn 사양을 지원하는지 확인합니다.

8.6.1. 설정

2FA에 대한 WebAuthn 지원 설정 절차는 다음과 같습니다.

8.6.1.1. WebAuthn authenticator 등록 활성화
  1. 메뉴에서 인증을 클릭합니다.
  2. 필요한 작업 탭을 클릭합니다.
  3. Register 를 클릭합니다.
  4. Required Action 드롭다운 목록을 클릭합니다.
  5. Webauthn Register 를 클릭합니다.
  6. 확인을 클릭합니다.

모든 새 사용자가 WebAuthn 자격 증명을 등록하도록 하려면 Default Action 확인란을 표시합니다.

8.6.1.2. 브라우저 흐름에 WebAuthn 인증 추가
  1. 메뉴에서 인증을 클릭합니다.
  2. browser flow 클릭합니다.
  3. 복사를 클릭하여 기본 제공 browser flow의 사본을 만듭니다.
  4. 복사의 이름을 입력합니다.
  5. 확인을 클릭합니다.
  6. WebAuthn browser - Conditional OTP 에 대한 Actions 링크를 클릭하고 삭제 를 클릭합니다.
  7. 삭제를 클릭합니다.

모든 사용자에게 WebAuthn이 필요한 경우:

  1. WebAuthn CloudEvent에 대한 Actions 링크를 클릭합니다.
  2. 실행 추가를 클릭합니다.
  3. 공급자 드롭다운 목록을 클릭합니다.
  4. WebAuthn Authenticator 를 클릭합니다.
  5. 저장을 클릭합니다.
  6. WebAuthn Authenticator에 대해 REQUIRED 를 클릭합니다.

    webauthn browser flow required

  7. 바인딩 탭을 클릭합니다.
  8. browsers flow 드롭다운 목록을 클릭합니다.
  9. WebAuthn browser를 클릭합니다.
  10. 저장을 클릭합니다.
참고

사용자에게 WebAuthn 자격 증명이 없는 경우 사용자는 WebAuthn 자격 증명을 등록해야 합니다.

WebAuthn 자격 증명만 등록된 경우 사용자는 WebAuthn으로 로그인할 수 있습니다. WebAuthn Authenticator 실행을 추가하는 대신 다음을 수행할 수 있습니다.

절차

  1. WebAuthn CloudEvent에 대한 Actions 링크를 클릭합니다.
  2. 흐름 추가를 클릭합니다.
  3. Alias (별칭) 필드에 "Conditional 2FA"를 입력합니다.
  4. 저장을 클릭합니다.
  5. 상태 2FA에 대해 CONDITIONAL 을 클릭합니다.
  6. Conditional 2FA 에 대한 Actions 링크를 클릭합니다.
  7. 실행 추가를 클릭합니다.
  8. 공급자 드롭다운 목록을 클릭합니다.
  9. 상태 - 사용자 구성 을 클릭합니다.
  10. 저장을 클릭합니다.
  11. Conditional 2FA에 대해 REQUIRED 를 클릭합니다.
  12. Conditional 2FA 에 대한 Actions 링크를 클릭합니다.
  13. 실행 추가를 클릭합니다.
  14. 공급자 드롭다운 목록을 클릭합니다.
  15. WebAuthn Authenticator 를 클릭합니다.
  16. 저장을 클릭합니다.
  17. 조건부 2FA대해 iPXENATIVE를 클릭합니다.

    webauthn browser flow conditional

사용자는 두 번째 요인으로 WebAuthn과 OTP를 사용할지 여부를 선택할 수 있습니다.

절차

  1. Conditional 2FA 에 대한 Actions 링크를 클릭합니다.
  2. 실행 추가를 클릭합니다.
  3. 공급자 드롭다운 목록을 클릭합니다.
  4. ITP 양식을 클릭합니다.
  5. 저장을 클릭합니다.
  6. 조건부 2FA대해 iPXENATIVE를 클릭합니다.

    webauthn browser flow conditional with OTP

8.6.2. WebAuthn authenticator로 인증

WebAuthn authenticator를 등록하면 사용자는 다음 작업을 수행합니다.

  • 로그인 양식을 엽니다. 사용자는 사용자 이름과 암호로 인증해야 합니다.
  • 사용자의 브라우저는 WebAuthn authenticator를 사용하여 인증하도록 사용자에게 요청합니다.

8.6.3. 관리자로 WebAuthn 관리

8.6.3.1. 인증 정보 관리

Red Hat Single Sign-On은 사용자 인증 정보 관리 의 다른 인증 정보와 마찬가지로 WebAuthn 자격 증명을 관리합니다.

  • Red Hat Single Sign-On은 사용자에게 Reset Actions 목록에서 WebAuthn 자격 증명을 생성하고 Webauthn Register 를 선택하는 데 필요한 작업을 할당합니다.
  • 관리자는 삭제를 클릭하여 WebAuthn 자격 증명을 삭제 할 수 있습니다.
  • 관리자는 Show data…​ 을 선택하여 AAGUID와 같은 인증 정보 데이터를 볼 수 있습니다.
  • 관리자는 User Label 필드에 값을 설정하고 데이터를 저장하여 인증 정보 레이블을 설정할 수 있습니다.
8.6.3.2. 정책 관리

관리자는 WebAuthn 관련 작업을 영역당 WebAuthn 정책 으로 구성할 수 있습니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. WebAuthn Policy 탭을 클릭합니다.
  3. 정책 내에서 항목을 구성합니다(아래 설명 참조).
  4. 저장을 클릭합니다.

구성 가능한 항목 및 설명은 다음과 같습니다.

설정설명

신뢰할 수 있는 엔티티 이름

읽을 수 있는 서버 이름입니다. WebAuthn Relying Party. 이 항목은 필수 항목이며 WebAuthn authenticator 등록에 적용됩니다. 기본 설정은 "keycloak"입니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

서명 알고리즘

알고리즘은 공개 키 자격 증명에 사용할 서명 알고리즘을 WebAuthn 인증자에게 알립니다. Red Hat Single Sign-On은 공개 키 자격 증명을 사용하여 인증 지원을 서명하고 확인합니다. 알고리즘이 없는 경우 기본 ES256 이 적용됩니다. ES256은 WebAuthn 인증자 등록에 적용되는 선택적 구성 항목입니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

당사자 ID 사용

공개 키 자격 증명 의 범위를 결정하는 WebAuthn Relying Party의 ID입니다. ID는 원본의 유효 도메인이어야 합니다. 이 ID는 WebAuthn 인증자 등록에 적용되는 선택적 구성 항목입니다. 이 항목이 비어 있으면 Red Hat Single Sign-On은 Red Hat Single Sign-On의 기본 URL의 호스트 부분을 조정합니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

제품 설명서 (Conveyance Preference)

브라우저의 WebAuthn API 구현(WebAuthn Client)은 Attestation 문을 생성하는 기본 방법입니다. 이 기본 설정은 WebAuthn authenticator 등록에 적용되는 선택적 구성 항목입니다. 옵션이 없는 경우 해당 동작은 "none"을 선택하는 것과 동일합니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

Authenticator 연결

WebAuthn Client에 대해 WebAuthn 인증 프로그램의 허용 가능한 첨부 패턴입니다. 이 패턴은 WebAuthn authenticator 등록에 적용되는 선택적 구성 항목입니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

Resident Key가 필요합니다.

WebAuthn 인증자가 필요한 옵션을 사용하여 공개 키 자격 증명을 클라이언트 측의 공개 키 인증 정보 소스로 생성합니다. 이 옵션은 WebAuthn 인증 도구 등록에 적용됩니다. 비워 두면 해당 동작은 "No"를 선택하는 것과 동일합니다. 자세한 내용은 WebAuthn Specification 을 참조하십시오.

사용자 확인 요구 사항

WebAuthn 인증자가 사용자 확인을 확인해야 합니다. 이는 WebAuthn Authenticator 등록 및 WebAuthn 인증자가 사용자 인증에 적용되는 선택적 구성 항목입니다. 옵션이 없는 경우 해당 동작은 "기본 설정"을 선택하는 것과 동일합니다. 자세한 내용은 WebAuthn 인증자가 사용자를 인증하기 위해 WebAuthn authenticator 및 WebAuthn Specification을 등록하기 위한 WebAuthn Specification을 참조하십시오.

Timeout

WebAuthn authenticator를 등록하고 WebAuthn authenticator를 사용하여 사용자를 인증하는 시간 초과 값(초)입니다. 0으로 설정하면 WebAuthn Authenticator 구현에 따라 동작이 달라집니다. 기본값은 0입니다. 자세한 내용은 WebAuthn 인증자가 사용자를 인증하기 위해 WebAuthn authenticator 및 WebAuthn Specification을 등록하기 위한 WebAuthn Specification을 참조하십시오.

Same Authenticator 등록 방지

활성화되어 있는 경우 Red Hat Single Sign-On은 이미 등록된 WebAuthn 인증자를 다시 등록할 수 없습니다.

허용 가능한 AAGUIDs

WebAuthn 인증자가 등록해야 하는 AAGUID의 흰색 목록입니다.

8.6.4. 검증 결과

WebAuthn authenticator를 등록할 때 Red Hat Single Sign-On은 WebAuthn 인증자가 생성한 검증 문의 신뢰할 수 있는지 확인합니다. Red Hat Single Sign-On에는 이를 위해 신뢰 앵커의 인증서가 필요합니다. Red Hat Single Sign-On은 Keycloak 신뢰 저장소를 사용하므로 이러한 인증서를 미리 가져와야 합니다.

이 검증을 생략하려면 이 신뢰 저장소를 비활성화하거나 WebAuthn 정책의 구성 항목 "Attestation Conveyance Preference"를 "none"으로 설정합니다.

8.6.5. WebAuthn 자격 증명 관리

8.6.5.1. WebAuthn authenticator 등록

WebAuthn 인증기를 등록하는 적절한 방법은 사용자가 Red Hat Single Sign-On에 계정을 이미 등록했는지 여부에 따라 달라집니다.

8.6.5.2. 새 사용자

WebAuthn Register 필수 작업이 영역의 기본 동작 인 경우 새 사용자는 처음 로그인한 후 WebAuthn 보안 키를 설정해야 합니다.

절차

  1. 로그인 양식을 엽니다.
  2. Register 를 클릭합니다.
  3. 양식의 항목을 입력합니다.
  4. Register 를 클릭합니다.

등록이 완료되면 브라우저가 사용자에게 WebAuthn authenticator 레이블의 텍스트를 입력하도록 요청합니다.

8.6.5.3. 기존 사용자

첫 번째 예제에 표시된 대로 WebAuthn Authenticator 가 설정된 경우 기존 사용자가 로그인하려고 할 때 WebAuthn Authenticator를 자동으로 등록해야 합니다.

절차

  1. 로그인 양식을 엽니다.
  2. 폼의 항목을 입력합니다.
  3. 저장을 클릭합니다.
  4. 로그인을 클릭합니다.

등록에 성공하면 사용자의 브라우저가 사용자에게 WebAuthn 인증자 레이블의 텍스트를 입력하도록 요청합니다.

8.6.6. 암호가 없는 WebAuthn과 Two-Factor

Red Hat Single Sign-On은 2단계 인증에 WebAuthn을 사용하지만 WebAuthn을 첫 번째 인증으로 사용할 수 있습니다. 이 경우 암호가 없는 WebAuthn 자격 증명을 가진 사용자는 암호 없이 Red Hat Single Sign-On에 인증할 수 있습니다. Red Hat Single Sign-On은 영역과 단일 인증 흐름 컨텍스트에서 WebAuthn을 암호 없이 2단계 인증 메커니즘으로 사용할 수 있습니다.

관리자는 일반적으로 WebAuthn 암호 없는 인증을 위해 사용자가 등록한 보안 키가 다른 요구 사항을 충족해야 합니다. 예를 들어 보안 키는 사용자가 CloudEvent를 사용하여 보안 키로 인증해야 하거나 더 강력한 인증 기관의 보안 키를 사용해야 할 수 있습니다.

이로 인해 Red Hat Single Sign-On을 통해 관리자는 별도의 WebAuthn 암호 없는 정책을 구성할 수 있습니다. Webauthn Register Passwordless action 유형 및 WebAuthn Passwordless Authenticator 유형의 인증기(Authn Passwordless Authenticator) 유형에는 필수 Webauthn Registerless 작업이 있습니다.

8.6.6.1. 설정

절차

다음과 같이 WebAuthn 암호 없는 지원을 설정합니다.

  1. WebAuthn 암호 없이 지원에 필요한 새로운 작업을 등록합니다. WebAuthn Authenticator 등록 활성화에 설명된 단계를 사용하십시오. Webauthn Register Passwordless 작업을 등록합니다.
  2. 정책을 구성합니다. 정책 관리에 설명된 단계 및 구성 옵션을 사용할 수 있습니다. WebAuthn Passwordless Policy 탭에서 Admin Console에서 구성을 수행합니다. 일반적으로 보안 키의 요구 사항은 2 단계 정책보다 강력합니다. 예를 들어 암호 없이 정책을 구성할 때 User Verification RequirementRequired 로 설정할 수 있습니다.
  3. 인증 흐름을 구성합니다. browsers 흐름에 WebAuthn 인증 추가에 설명된 WebAuthn browser 흐름을 사용합니다. 다음과 같이 흐름을 구성합니다.

    • WebAuthn CloudEvent forms 하위 흐름에는 첫 번째 인증자로서 Username Form 이 포함되어 있습니다. 기본 Username Password Form authenticator를 삭제하고 Username Form authenticator를 추가합니다. 이 작업을 수행하려면 사용자가 사용자 이름을 첫 번째 단계로 제공해야 합니다.
    • 필요한 하위 흐름(예: Passwordless 또는 Two-factor )이 있습니다. 이 하위 흐름은 사용자가 Passwordless WebAuthn 자격 증명 또는 Two-factor 인증을 사용하여 인증할 수 있음을 나타냅니다.
    • 이 흐름에는 첫 번째 대안으로 WebAuthn Passwordless Authenticator 가 포함되어 있습니다.
    • 두 번째 대안은 Password and Two-factor Webauthn 이라는 하위 흐름입니다. 예를 들면 다음과 같습니다. 이 하위 흐름에는 암호 양식과 Web Authn Authenticator 가 포함되어 있습니다.

흐름의 최종 구성은 다음과 유사합니다.

암호 없는 흐름

PasswordLess flow

이미 Red Hat Single Sign-On으로 알려진 사용자에게 필요한 작업으로 WebAuthn Register Passwordless 를 추가하여 이를 테스트할 수 있습니다. 첫 번째 인증 중에 사용자는 암호 및 두 번째 요소 WebAuthn 자격 증명을 사용해야 합니다. 사용자가 WebAuthn 암호 없는 자격 증명을 사용하는 경우 암호 및 두 번째 요소 WebAuthn 자격 증명을 제공할 필요가 없습니다.

8.6.7. LoginLess WebAuthn

Red Hat Single Sign-On은 2단계 인증에 WebAuthn을 사용하지만 WebAuthn을 첫 번째 인증으로 사용할 수 있습니다. 이 경우 암호가 없는 WebAuthn 자격 증명을 가진 사용자는 로그인 또는 암호를 제출하지 않고도 Red Hat Single Sign-On에 인증할 수 있습니다. Red Hat Single Sign-On은 영역 컨텍스트에서 loginless/passwordless 및 2 단계 인증 메커니즘으로 WebAuthn을 사용할 수 있습니다.

관리자는 일반적으로 WebAuthn 로그인리스 인증을 위해 사용자가 등록한 보안 키가 다른 요구 사항을 충족해야 합니다. 로그인되지 않은 인증에서는 사용자가 보안 키(예: CloudEvent 코드 또는 지문을 사용하여) 인증하고 로그인리스 자격 증명과 관련된 암호화 키가 보안 키에 물리적으로 저장되어야 합니다. 모든 보안 키가 이러한 종류의 요구 사항을 충족하는 것은 아닙니다. 장치가 '사용자 확인' 및 '기타 키'를 지원하는지의 보안 주요 공급 업체에 확인하십시오. 지원되는 보안 키 를 참조하십시오.

Red Hat Single Sign-On에서는 관리자가 로그인 없이 인증할 수 있는 방식으로 WebAuthn 암호 없는 정책을 구성할 수 있습니다. 로그인리스 인증은 WebAuthn Passwordless 정책 및 WebAuthn 암호 없는 자격 증명으로만 구성할 수 있습니다. WebAuthn 로그인리스 인증 및 WebAuthn 암호 없는 인증은 동일한 영역에서 구성할 수 있지만 동일한 정책 WebAuthn 암호 없는 정책을 공유합니다.

8.6.7.1. 설정

절차

다음과 같이 WebAuthn 로그인 없는 지원을 설정합니다.

  1. WebAuthn 암호 없이 지원에 필요한 새로운 작업을 등록합니다. WebAuthn Authenticator 등록 활성화에 설명된 단계를 사용하십시오. Webauthn Register Passwordless 작업을 등록합니다.
  2. WebAuthn 암호 없는 정책 구성 . WebAuthn Passwordless Policy 탭에서 Admin Console, Authentication 섹션에서 구성을 수행합니다. 로그인할 수 없는 시나리오에 대한 정책을 구성할 때 사용자 확인 요구 사항을 required 로 설정하고 Resident KeyYes 로 설정해야 합니다. 로그인리스 전용 정책이 없기 때문에 사용자 verification=no/resident key=no 및 loginless 시나리오(사용자 검증=yes/resident key=yes)와 인증 시나리오를 혼합할 수 없습니다. 스토리지 용량은 일반적으로 보안 키에 매우 제한되므로 보안 키에 많은 상주 키를 저장할 수 없습니다.
  3. 인증 흐름을 구성합니다. 새 인증 흐름을 만들고 "WebAuthn Passwordless" 실행을 추가하고 실행 요구 사항 설정을 필수로 설정합니다 .

흐름의 최종 구성은 다음과 유사합니다.

LoginLess flow

LoginLess flow

이제 이를 테스트하기 위해 이미 Red Hat Single Sign-On에 알려진 사용자에게 WebAuthn Register Passwordless 작업을 사용자에게 추가할 수 있습니다. 필요한 작업이 구성된 사용자는 인증해야 하며(예: 사용자 이름/암호 사용) 로그인이 없는 인증에 사용할 보안 키를 등록하라는 메시지가 표시됩니다.

8.6.7.2. 벤더별 공지 사항
8.6.7.2.1. 호환성 검사 목록

Red Hat Single Sign-On으로 로그인할 때 다음과 같은 기능을 충족하기 위해 보안 키가 필요합니다.

  • FIDO2 규정 준수: FIDO/U2F와 혼동되지 않음
  • 사용자 확인: 보안 키를 사용하여 사용자를 인증할 수 있는 기능(로그인 없이 인증할 수 있는 보안 키를 찾는 사람 포함)
  • Resident Key: 보안 키가 로그인 및 클라이언트 애플리케이션과 관련된 암호화 키를 저장할 수 있는 기능
8.6.7.2.2. Windows Hello

Windows Hello 기반 자격 증명을 사용하여 Red Hat Single Sign-On에 대해 인증하려면 RS256 값을 포함하도록 WebAuthn 암호 없는 정책의 서명 알고리즘 설정을 구성합니다. 일부 브라우저에서는 개인 창에서 플랫폼 보안 키(예: Windows Hello)에 대한 액세스를 허용하지 않습니다.

8.6.7.2.3. 지원되는 보안 키

다음 보안 키는 Red Hat Single Sign-On을 사용하여 로그인할 수 없는 인증을 성공적으로 테스트했습니다.

  • Windows Hello (Windows 10 21H1/21H2)
  • Yubico Yubikey 5 iPXE
  • 페리안 ePass FIDO-NFC

8.7. 복구 코드 (RecoveryCodes)

'Recovery Authentication Code Form'을 인증 흐름에 2단계 인증으로 추가하여 2단계 인증 코드를 구성할 수 있습니다. 이 인증자를 구성하는 예는 WebAuthn 을 참조하십시오.

참고

recoveryCodes는 기술 프리뷰 이며 완전히 지원되지 않습니다. 이 기능은 기본적으로 비활성화되어 있습니다.

-Dkeycloak.profile=preview 또는 -Dkeycloak.profile.feature.recovery_codes=enabled 로 서버를 시작하려면 다음을 수행하십시오. 자세한 내용은 프로필을 참조하십시오.

8.8. 조건부 흐름의 조건

실행 요구 사항에서 언급했듯이조건 실행조건부 하위 흐름에만 포함될 수 있습니다. 모든 Condition 실행이 true로 평가되면 Conditional 하위 흐름이 Required 로 작동합니다. Conditional 하위 흐름에서 다음 실행을 처리할 수 있습니다. Conditional 하위 흐름에 포함된 일부 실행이 false로 평가되면 전체 하위 흐름이 Disabled 로 간주됩니다.

8.8.1. 사용 가능한 조건

상태 - 사용자 역할

이 실행에는 사용자에게 User role 필드에 정의된 역할이 있는지 확인할 수 있습니다. 사용자에게 필요한 역할이 있는 경우 실행은 true로 간주되고 기타 실행은 평가됩니다. 관리자는 다음 필드를 정의해야 합니다.

별칭
인증 흐름에 표시될 실행 이름을 설명합니다.
사용자 역할
사용자가 이 흐름을 실행해야 하는 역할입니다. 애플리케이션 역할을 지정하려면 구문은 appname.approle (예: myapp.myrole)입니다.
상태 - 사용자 구성
이렇게 하면 흐름의 다른 실행이 사용자에게 구성되어 있는지 확인합니다. 실행 요구 사항 섹션에는 OTP 양식의 예가 포함되어 있습니다.
상태 - 사용자 속성

이렇게 하면 사용자가 필수 특성을 설정했는지 확인합니다. 출력을 부정할 가능성이 있습니다. 즉, 사용자에게 속성이 없어야 합니다. 사용자 속성 섹션에서는 사용자 지정 특성을 추가하는 방법을 보여줍니다. 이러한 필드를 제공할 수 있습니다.

별칭
인증 흐름에 표시될 실행 이름을 설명합니다.
특성 이름
확인할 속성의 이름입니다.
예상 특성 값
특성의 예상 값입니다.
negate 출력
출력을 무효화할 수 있습니다. 즉, 속성이 존재해서는 안 됩니다.

8.8.2. 조건부 흐름에서 명시적으로 거부/허용 액세스 허용

조건부 흐름에서 리소스에 대한 액세스를 허용하거나 거부할 수 있습니다. 두 인증 정보 액세스 거부허용 액세스 제어 조건별 리소스에 대한 액세스 권한 허용

허용 액세스
Authenticator는 항상 성공적으로 인증됩니다. 이 Authenticator는 구성할 수 없습니다.
액세스 거부

액세스는 항상 거부됩니다. 사용자에게 표시되는 오류 메시지를 정의할 수 있습니다. 이러한 필드를 제공할 수 있습니다.

별칭
인증 흐름에 표시될 실행 이름을 설명합니다.
오류 메시지
사용자에게 표시되는 오류 메시지입니다. 오류 메시지는 지역화와 함께 사용하기 위해 특정 메시지 또는 속성으로 제공될 수 있습니다. (즉, "admin' 역할이 없습니다." messages properties에서 my-property-deny "는 속성 액세스 거부 로 정의된 기본 메시지에 대해 공백을 유지합니다.

다음은 role1 역할이 없고 속성 deny- role1 에 정의된 오류 메시지를 표시하는 모든 사용자에게 액세스를 거부하는 예제입니다. 이 예제에는 상태 - 사용자 역할거부 액세스 실행이 포함됩니다.

브라우저 흐름

deny access flow

조건 - 사용자 역할 구성

deny access role condition

거부 액세스의 구성은 매우 쉽습니다. 다음과 같이 임의의 별칭 및 필수 메시지를 지정할 수 있습니다.

deny access execution cond

마지막으로 로그인me messages_en.properties (한국어의 경우)에서 오류 메시지를 사용하여 속성을 정의하는 것입니다.

deny-role1 = You do not have required role!

9장. ID 공급자 통합

ID 브로커는 서비스 공급자를 ID 공급자와 연결하는 중개자 서비스입니다. ID 브로커는 외부 ID 공급자와의 관계를 생성하여 공급자의 ID를 사용하여 서비스 공급자가 노출하는 내부 서비스에 액세스합니다.

사용자 관점에서 ID 브로커는 보안 도메인 및 영역의 ID를 관리하는 사용자 중심의 중앙 집중식 방법을 제공합니다. ID 공급자의 ID를 하나 이상 사용하여 계정을 연결하거나 ID 정보를 기반으로 계정을 만들 수 있습니다.

ID 공급자는 인증 및 권한 부여 정보를 사용자에게 인증하고 전송하는 데 사용되는 특정 프로토콜에서 파생됩니다. 다음을 수행할 수 있습니다.

  • Facebook, Google 또는wisor와 같은 소셜 공급자입니다.
  • 사용자가 서비스에 액세스해야 하는 비즈니스 파트너입니다.
  • 통합하려는 클라우드 기반 ID 서비스입니다.

일반적으로 Red Hat Single Sign-On은 다음 프로토콜을 기반으로 ID 공급자를 기반으로 합니다.

  • SAML v2.0
  • OpenID Connect v1.0
  • OAuth v2.0

9.1. 브로커링 개요

Red Hat Single Sign-On을 ID 브로커로 사용하는 경우 Red Hat Single Sign-On은 사용자가 특정 영역에서 인증하기 위해 자격 증명을 제공하도록 강제 적용하지 않습니다. Red Hat Single Sign-On에는 인증할 수 있는 ID 공급자 목록이 표시됩니다.

기본 ID 공급자를 구성하는 경우 Red Hat Single Sign-On은 사용자를 기본 공급자로 리디렉션합니다.

참고

프로토콜마다 다른 인증 흐름이 필요할 수 있습니다. Red Hat Single Sign-On에서 지원하는 모든 ID 공급자는 다음 흐름을 사용합니다.

ID 브로커 흐름

Identity broker flow

  1. 인증되지 않은 사용자는 클라이언트 애플리케이션에서 보호되는 리소스를 요청합니다.
  2. 클라이언트 애플리케이션은 사용자를 Red Hat Single Sign-On으로 리디렉션하여 인증합니다.
  3. Red Hat Single Sign-On에는 영역에 구성된 ID 공급자 목록이 포함된 로그인 페이지가 표시됩니다.
  4. 사용자는 버튼 또는 링크를 클릭하여 아이덴티티 제공자 중 하나를 선택합니다.
  5. Red Hat Single Sign-On은 인증을 요청하는 대상 ID 공급자에 인증 요청을 발행하고 사용자를 ID 공급자의 로그인 페이지로 리디렉션합니다. 관리자가 이미 Admin Console의 ID 공급자에 대한 연결 속성 및 기타 구성 옵션을 설정했습니다.
  6. 사용자는 자격 증명을 제공하거나 ID 공급자를 인증하는 데 동의합니다.
  7. ID 공급자가 성공적으로 인증하면 사용자는 인증 응답을 사용하여 Red Hat Single Sign-On으로 다시 리디렉션됩니다. 일반적으로 응답에는 Red Hat Single Sign-On에서 ID 공급자의 인증을 신뢰하고 사용자 정보를 검색하기 위해 사용하는 보안 토큰이 포함됩니다.
  8. Red Hat Single Sign-On은 ID 공급자의 응답이 유효한지 확인합니다. 유효한 경우 Red Hat Single Sign-On을 가져와서 사용자가 아직 없는 경우 사용자를 생성합니다. Red Hat Single Sign-On은 토큰에 해당 정보가 포함되지 않은 경우 ID 공급자에게 추가 사용자 정보를 요청할 수 있습니다. 이 동작은 ID 페더레이션 입니다. 사용자가 이미 존재하는 경우 Red Hat Single Sign-On은 사용자에게 ID 공급자로부터 반환된 ID를 기존 계정과 연결하도록 요청할 수 있습니다. 이 동작은 계정 연결입니다. Red Hat Single Sign-On을 사용하면 계정 연결을 구성하고 첫 번째 로그인 흐름 에서 지정할 수 있습니다. 이 단계에서 Red Hat Single Sign-On은 사용자를 인증하고 해당 토큰을 발행하여 서비스 공급자의 요청된 리소스에 액세스합니다.
  9. 사용자가 인증하면 Red Hat Single Sign-On은 로컬 인증 중에 이전에 발행된 토큰을 전송하여 사용자를 서비스 공급자로 리디렉션합니다.
  10. 서비스 공급자는 Red Hat Single Sign-On에서 토큰을 수신하고 보호 리소스에 대한 액세스를 허용합니다.

이 흐름의 변형이 가능합니다. 예를 들어 클라이언트 애플리케이션은 목록을 표시하는 대신 특정 ID 공급자를 요청할 수 있습니다. 또는 사용자가 ID를 통합하기 전에 추가 정보를 제공하도록 Red Hat Single Sign-On을 설정할 수 있습니다.

인증 프로세스가 끝나면 Red Hat Single Sign-On은 클라이언트 애플리케이션에 토큰을 발행합니다. 클라이언트 애플리케이션은 외부 ID 공급자와 분리되어 있으므로 클라이언트 애플리케이션의 프로토콜이나 사용자의 ID를 검증하는 방법을 확인할 수 없습니다. 공급자는 Red Hat Single Sign-On에 대해서만 알아야 합니다.

9.2. 기본 ID 공급자

Red Hat Single Sign-On은 로그인 양식을 표시하는 대신 ID 공급자로 리디렉션할 수 있습니다. 이 리디렉션을 활성화하려면 다음을 수행합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. browser flow 클릭합니다.
  3. 드롭다운 목록에서 ID 공급자 리디렉션 을 선택합니다.
  4. Default Identity Provider 를 사용자를 리디렉션할 ID 공급자로 설정합니다.

Red Hat Single Sign-On이 구성된 기본 ID 공급자를 찾지 못하면 로그인 양식이 표시됩니다.

이 authenticator는 kc_idp_hint 쿼리 매개변수를 처리해야 합니다. 자세한 내용은 클라이언트 제안된 ID 공급자 섹션을 참조하십시오.

9.3. 일반 구성

ID 브로커 구성의 기반은 IDP(ID 공급자)입니다. Red Hat Single Sign-On은 각 영역에 대한 ID 공급자를 생성하여 기본적으로 모든 애플리케이션에 대해 활성화합니다. 영역의 사용자는 애플리케이션에 로그인할 때 등록된 ID 공급자를 사용할 수 있습니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.

    ID 공급자

    Identity Providers

  2. Add provider 목록에서 추가할 ID 공급자를 선택합니다. Red Hat Single Sign-On에는 선택한 ID 공급자에 대한 구성 페이지가 표시됩니다.

    facebook ID 공급자 추가

    Add Facebook Identity Provider

    ID 공급자를 구성하면 Red Hat Single Sign-On 로그인 페이지에 ID 공급자가 옵션으로 표시됩니다. 각 ID 공급자에 대한 로그인 화면에 사용자 정의 아이콘을 배치할 수 있습니다. 자세한 내용은 사용자 정의 아이콘을 참조하십시오.

    IDP 로그인 페이지

    identity provider login page

    Hocial
    소셜 공급자를 통해 해당 영역에서 소셜 인증을 사용할 수 있습니다. Red Hat Single Sign-On을 사용하면 사용자가 소셜 네트워크 계정을 사용하여 애플리케이션에 로그인할 수 있습니다. 지원 제공 업체에는witter, Facebook, Google, NVIDIA, 인스타그램, Microsoft, FCP, Openshift v3, GitHub, GitLab, Bitbucket 및 Stack Overflow가 포함됩니다.
    프로토콜 기반
    프로토콜 기반 공급자는 특정 프로토콜을 사용하여 사용자를 인증하고 권한을 부여합니다. 이러한 공급자를 사용하여 특정 프로토콜과 호환되는 모든 ID 공급자에 연결할 수 있습니다. Red Hat Single Sign-On은 SAML v2.0 및 OpenID Connect v1.0 프로토콜을 지원합니다. 이러한 오픈 표준을 기반으로 ID 공급자를 구성하고 중개할 수 있습니다.

각 유형의 ID 공급자에는 구성 옵션이 있지만 모두 공통 구성을 공유합니다. 다음 설정 옵션을 사용할 수 있습니다.

표 9.1. 공통 설정
설정설명

별칭

별칭은 ID 공급자의 고유 식별자이며 내부 ID 공급자를 참조합니다. Red Hat Single Sign-On은 별칭을 사용하여 ID 공급자와 통신하기 위해 리디렉션 URI 또는 콜백 URL이 필요한 OpenID Connect 프로토콜의 리디렉션 URI를 빌드합니다. 모든 ID 공급자에는 별칭이 있어야 합니다. 별칭 예제에는 facebook,google, idp.acme.com 이 있습니다.

enabled

공급자를 ON 또는 OFF로 전환합니다.

로그인 페이지에서 숨기기

Red Hat Single Sign-On은 이 공급자를 로그인 페이지에 로그인 옵션으로 표시하지 않습니다. 클라이언트는 URL의 'kc_idp_hint' 매개변수를 사용하여 로그인을 요청하여 이 공급자를 요청할 수 있습니다.

계정 연결만

Red Hat Single Sign-On은 기존 계정을 이 공급자와 연결합니다. 이 공급자는 사용자를 로그인할 수 없으며 Red Hat Single Sign-On은 이 공급자를 로그인 페이지에 옵션으로 표시하지 않습니다.

저장소 토큰

Red Hat Single Sign-On은 ON 으로 ID 공급자의 토큰을 저장합니다.

읽기 가능한 저장된 토큰

ON 을 사용하면 저장된 ID 공급자 토큰을 검색할 수 있습니다. 이 작업은 브로커 클라이언트 수준 역할 읽기 토큰 에도 적용됩니다.

신뢰 이메일

Red Hat Single Sign-On에서는 ID 공급자의 이메일 주소를 신뢰합니다. 영역에 이메일 검증이 필요한 경우 이 ID 공급자에서 로그인하는 사용자는 이메일 확인 프로세스를 수행할 필요가 없습니다.

GUI 순서

로그인 페이지에서 사용 가능한 ID 공급자의 정렬 순서입니다.

첫 번째 로그인 워크플로우

인증 흐름 Red Hat Single Sign-On은 사용자가 이 ID 공급자를 사용하여 Red Hat Single Sign-On에 처음 로그인할 때 트리거됩니다.

로그인 후 흐름

인증 흐름 Red Hat Single Sign-On은 사용자가 외부 ID 공급자의 로그인을 완료하면 트리거됩니다.

동기화 모드

ID 공급자에서 매퍼를 통해 사용자 정보를 업데이트하는 전략입니다. 레거시 버전을 선택할 때 Red Hat Single Sign-On은 현재 동작을 사용했습니다. 가져오기 는 사용자 데이터를 업데이트하지 않고 가능한 경우 사용자 데이터를 강제 업데이트합니다. 자세한 내용은 ID 공급자 매퍼를 참조하십시오.

9.4. 소셜 ID 공급자

소셜 ID 공급자는 신뢰할 수 있는 신뢰할 수 있는 소셜 미디어 계정에 인증을 위임할 수 있습니다. Red Hat Single Sign-On에는 Google, Facebook,book, GitHub,southeast, Microsoft, Stack Overflow와 같은 소셜 네트워크 지원이 포함되어 있습니다.

9.4.1. Bitbucket

Bitbucket을 사용하여 로그인하려면 다음 절차를 수행합니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 Bitbucket 을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 Bitbucket Cloud 프로세스에서 OAuth 를 수행합니다. 소비자 추가 를 클릭하면 다음과 같습니다.

    1. Redirect URI 값을 callback URL 필드에 붙여넣습니다.
    2. 애플리케이션이 이메일을 읽을 수 있도록 계정 섹션에서 이메일읽기 를 선택해야 합니다.
  5. 소비자를 생성할 때 KeySecret 값이 Bitbucket으로 표시됩니다.
  6. Red Hat Single Sign-On에서 Key 값을 클라이언트 ID 필드에 붙여넣습니다.
  7. Red Hat Single Sign-On에서 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  8. 저장을 클릭합니다.

9.4.2. Facebook

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 Facebook 을 선택합니다. Red Hat Single Sign-On에는 Facebook ID 공급자에 대한 구성 페이지가 표시됩니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 Facebook 개발자 가이드의 지침에 따라 Facebook에서 프로젝트와 클라이언트를 생성합니다.

    1. 앱이 웹 사이트 유형 앱인지 확인하십시오.
    2. Redirect URI의 값을 Facebook website settings 블록의 사이트 URL 에 입력합니다.
    3. 앱이 공용인지 확인합니다.
  5. Facebook 앱의 클라이언트 ID 및 클라이언트 시크릿 값을 Red Hat Single Sign-On의 클라이언트 ID 및 클라이언트 시크릿 필드에 입력합니다.
  6. 기본 범위 필드에 필요한 범위를 입력합니다. 기본적으로 Red Hat Single Sign-On은 이메일 범위를 사용합니다. Facebook 범위에 대한 자세한 내용은 그래프 API 를 참조하십시오.

Red Hat Single Sign-On은 프로필 요청을 graph.facebook.com/me?fields=id,name,email,first_name,last_name 으로 보냅니다. 응답에는 id, name, email, first_name, last_name 필드만 포함됩니다. Facebook 프로필에서 추가 필드를 가져오려면 해당 범위를 추가하고 추가 사용자의 프로필 필드 구성 옵션 필드에 필드 이름을 추가합니다.

9.4.3. GitHub

Github로 로그인하려면 다음 절차를 수행하십시오.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 Github 를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 OAUTH 앱을 만듭니다.

    1. 앱을 생성할 때 Redirect URI 값을 Authorization 콜백 URL 필드에 입력합니다.
    2. OAUTH 앱의 관리 페이지에 있는 클라이언트 ID 및 클라이언트 시크릿을 기록해 둡니다.
  5. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.4. GitLab

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 GitLab 을 선택합니다.

    ID 공급자 추가

    Add identity provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 새 GitLab 애플리케이션을 추가합니다.

    1. 클립보드에 있는 리디렉션 URI리디렉션 URI 로 사용합니다.
    2. 애플리케이션을 저장할 때 클라이언트 ID클라이언트 시크릿 을 기록해 둡니다.
  5. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.5. Google

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. 공급자 추가 목록에서 Google 을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. 별도의 브라우저 탭에서 Google Cloud Platform 콘솔을 엽니다.
  4. Google 앱의 Google 대시보드에서 OAuth 동의 화면 메뉴를 클릭합니다. 동의 화면의 사용자 유형이 외부인지 확인하는 동의 화면을 만듭니다.
  5. Google 대시보드에서 다음을 수행합니다.

    1. Credentials 메뉴를 클릭합니다.
    2. CREATE CREDENTIALS - OAuth Client ID 를 클릭합니다.
    3. 애플리케이션 유형 목록에서 웹 애플리케이션 을 선택합니다.
    4. 생성을 클릭합니다.
    5. 참고 클라이언트 ID클라이언트 시크릿.
  6. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  7. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  8. 기본 범위 필드에 필요한 범위를 입력합니다. 기본적으로 Red Hat Single Sign-On은 다음 범위를 사용합니다. openid 프로필 이메일. Google 범위 목록 은 OAuth Play 지주를 참조하십시오.
  9. GSuite 조직의 구성원에 대해서만 액세스를 제한하려면 호스팅 도메인 필드에 G Suite 도메인을 입력합니다.
  10. 저장을 클릭합니다.

9.4.6. LinkedIn

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. 공급자 추가 목록에서 login을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 앱을 만듭니다.

    1. 앱을 생성한 후 Auth 탭을 클릭합니다.
    2. 앱의 리디렉션 URL 필드에 Redirect URI 값을 입력합니다.
    3. 참고 클라이언트 ID클라이언트 시크릿.
  5. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.7. Microsoft

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. 공급자 추가 목록에서 Microsoft 를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 Microsoft 앱을 만듭니다.

    1. URL 추가 를 클릭하여 Microsoft 앱에 리디렉션 URL을 추가합니다.
    2. 애플리케이션 ID 및 애플리케이션 시크릿을 기록해 둡니다.
  5. Red Hat Single Sign-On에서 애플리케이션 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 애플리케이션 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.8. OpenShift 3

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 Openshift 를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. oc 명령줄 툴을 사용하여 클라이언트를 등록합니다.

    $ oc create -f <(echo '
    kind: OAuthClient
    apiVersion: v1
    metadata:
     name: kc-client 1
    secret: "..." 2
    redirectURIs:
     - "http://www.example.com/" 3
    grantMethod: prompt 4
    ')
1
OAuth 클라이언트의 이름입니다. <openshift_master> /oauth/ authorize 및 <openshift_master> / oauth/ token에 요청할 때 client_id 요청 매개변수로 전달됩니다.
2
secret Red Hat Single Sign-On은 client_secret 요청 매개변수에 사용합니다.
3
< openshift_master> /oauth/authorize 및 < openshift_master> /oauth/token 에 대한 요청에 지정된 redirect_uri 매개변수는 redirectURI의 URI 중 하나와 같거나 접두사로 지정해야 합니다. ID 공급자 화면의 리디렉션 URI 필드에서 이 값을 가져올 수 있습니다.
4
grantMethod Red Hat Single Sign-On은 이 클라이언트가 토큰을 요청할 때 작업을 결정하지만 사용자가 액세스 권한을 부여하지 않았습니다.
  1. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  2. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  3. 저장을 클릭합니다.

9.4.9. OpenShift 4

사전 요구 사항

  1. jq 설치 .
  2. 컨테이너에 구성된 X509_CA_BUNDLE/var/run/secrets/kubernetes.io/serviceaccount/ca.crt.

절차

  1. 명령줄에서 다음 명령을 실행하고 OpenShift 4 API URL 출력을 확인합니다.

    curl -s -k -H "Authorization: Bearer $(oc whoami -t)" \https://<openshift-user-facing-api-url>/apis/config.openshift.io/v1/infrastructures/cluster | jq ".status.apiServerURL"
  2. Red Hat Single Sign-On 메뉴에서 Identity Providers 를 클릭합니다.
  3. Add provider 목록에서 Openshift 를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  4. Redirect URI 값을 클립보드로 복사합니다.
  5. oc 명령줄 툴을 사용하여 클라이언트를 등록합니다.

    $ oc create -f <(echo '
    kind: OAuthClient
    apiVersion: oauth.openshift.io/v1
    metadata:
     name: keycloak-broker 1
    secret: "..." 2
    redirectURIs:
     - "<copy pasted Redirect URI from OpenShift 4 Identity Providers page>" 3
    grantMethod: prompt 4
    ')
1
OAuth 클라이언트의 이름입니다. <openshift_master> /oauth/ authorize 및 <openshift_master> / oauth/ token에 요청할 때 client_id 요청 매개변수로 전달됩니다. name 매개변수는 OAuthClient 오브젝트와 Red Hat Single Sign-On 구성에서 동일해야 합니다.
2
Red Hat Single Sign-On은 client_ secret 요청 매개변수로 사용합니다.
3
< openshift_master> /oauth/authorize 및 < openshift_master> /oauth/token 에 대한 요청에 지정된 redirect_uri 매개변수는 redirectURI의 URI 중 하나와 같거나 접두사로 지정해야 합니다. 이를 올바르게 구성하는 가장 쉬운 방법은 Red Hat Single Sign-On OpenShift 4 ID 공급자 구성 페이지(Redirect URI 필드)에서 복사-붙여넣는 것입니다.
4
grantMethod Red Hat Single Sign-On은 이 클라이언트가 토큰을 요청할 때 작업을 결정하지만 사용자가 액세스 권한을 부여하지 않았습니다.
  1. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  2. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  3. 저장을 클릭합니다.

자세한 내용은 공식 OpenShift 문서를 참조하십시오.

9.4.10. PayPal

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider (프로바이더 추가) 목록에서 10.0.0.1 을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 10.0.0.1 개발자 애플리케이션 영역을 엽니다.

    1. Create App (앱 만들기)을 클릭하여 hieradata 앱을 생성합니다.
    2. 클라이언트 ID 및 클라이언트 시크릿을 기록해 둡니다. Show 링크를 클릭하여 시크릿을 확인합니다.
    3. Connect with hieradata가 선택되어 있는지 확인합니다.
    4. Return URL 필드의 값을 Red Hat Single Sign-On에서 Redirect URI 값으로 설정합니다.
  5. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.11. 스택 오버플로

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 Stack Overflow 를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. 별도의 브라우저 탭에서 Stack Apps에 애플리케이션을 등록하십시오.

    애플리케이션 등록

    Register Application

    1. 애플리케이션 이름 필드에 애플리케이션 이름을 입력합니다.
    2. OAuth 도메인 필드에 OAuth 도메인을 입력합니다.
    3. 애플리케이션 등록을 클릭합니다.

      설정

      Settings

  4. 클라이언트 ID 및 클라이언트 시크릿을 기록해 둡니다.
  5. Red Hat Single Sign-On에서 클라이언트 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 클라이언트 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.12. Twitter

사전 요구 사항

  1. Thunderbird 개발자 계정입니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서witter를 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 Thunderbird Application Management에서 앱을 만듭니다.

    1. 이름과 설명에 대한 값을 입력합니다.
    2. website 의 값은 localhost 를 제외한 모든 유효한 URL일 수 있습니다.
    3. 리디렉션 URL의 값을 callback URL 필드에 붙여넣습니다.
    4. Thunderbird 앱을 생성할 때 Keys 및 Access Tokens 섹션의 소비자 키 및 소비자 시크릿 값을 기록해 둡니다.
  5. Red Hat Single Sign-On에서 Consumer Key 값을 Client ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 소비자 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.4.13. Instagram

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider (프로바이더 추가) 목록에서 10.0.0.1 .net 선택합니다. Red Hat Single Sign-On에는 OpenSSL ID 공급자에 대한 구성 페이지가 표시됩니다.

    ID 공급자 추가

    Add Identity Provider

  3. Redirect URI 값을 클립보드로 복사합니다.
  4. 별도의 브라우저 탭에서 Facebook 개발자 콘솔 을 엽니다.

    1. 내 앱을 클릭합니다.
    2. 새 앱 추가를 선택합니다.

      새 앱 추가

      Add a New App

    3. 모든 항목에 대해 을 선택합니다.

      새 앱 ID 만들기

      instagram create app id

    4. 모든 필수 필드를 입력합니다.
    5. 앱 생성을 클릭합니다. 그런 다음 Facebook이 대시보드로 이동합니다.
    6. 탐색 패널에서 Settings - Basic 을 선택합니다.

      플랫폼 추가

      Add Platform

    7. + 플랫폼 추가를 선택합니다.
    8. [웹사이트] 를 클릭합니다.
    9. 사이트의 URL을 입력합니다.

      제품 추가

      instagram add product

    10. 메뉴에서 대시보드 를 선택합니다.
    11. OpenSSL 상자에서 Set Up 을 클릭합니다.
    12. 메뉴에서 OpenSSL - Basic Display 를 선택합니다.
    13. 새 앱 만들기를 클릭합니다.

      새 OpenSSL 앱 ID 만들기

      Create a New Instagram App ID

    14. 디스플레이 이름 에 값을 입력합니다.

      앱 설정

      Setup the App

    15. Red Hat Single Sign-On의 리디렉션 URL유효한 OAuth 리디렉션 URI 필드에 붙여넣습니다.
    16. Red Hat Single Sign-On의 리디렉션 URLDeauthorize callback URL 필드에 붙여넣습니다.
    17. Red Hat Single Sign-On의 리디렉션 URL데이터 삭제 요청 URL 필드에 붙여넣습니다.
    18. OpenSSL 앱 시크릿 필드에서 Show 를 클릭합니다.
    19. OpenSSL 앱 ID와 OpenSSL 시크릿을 기록해 둡니다.
    20. 앱 검토 - 요청을 클릭합니다.
    21. 화면의 지침을 따릅니다.
  5. Red Hat Single Sign-On에서 OpenSSL 앱 ID 값을 클라이언트 ID 필드에 붙여넣습니다.
  6. Red Hat Single Sign-On에서 OpenSSL 앱 시크릿 값을 클라이언트 시크릿 필드에 붙여넣습니다.
  7. 저장을 클릭합니다.

9.5. OpenID Connect v1.0 ID 공급자

OpenID Connect 프로토콜을 기반으로 하는 Red Hat Single Sign-On 브로커 ID 공급자입니다. 이러한 ID 공급자(IDP)는 사용자를 인증하고 액세스 권한을 승인하기 위해 사양에 정의된 인증 코드 흐름을 지원해야 합니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 OpenID Connect v1.0 을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. 초기 구성 옵션을 입력합니다. 구성 옵션에 대한 자세한 내용은 일반 IDP 구성을 참조하십시오.

    표 9.2. OpenID connect 구성
    설정설명

    권한 부여 URL

    OIDC 프로토콜에 필요한 권한 부여 URL 끝점입니다.

    토큰 URL

    OIDC 프로토콜에 필요한 토큰 URL 끝점입니다.

    Logout URL

    OIDC 프로토콜의 로그 아웃 URL 끝점입니다. 이 값은 선택 사항입니다.

    Backchannel Logout

    IDP에 대한 백그라운드(out-of-band) REST 요청으로 사용자를 로그아웃합니다. 일부 IDP는 브라우저 쿠키를 사용하여 세션을 확인할 수 있으므로 브라우저 리디렉션을 통해서만 logout을 수행합니다.

    사용자 정보 URL

    OIDC 프로토콜이 정의하는 끝점입니다. 이 끝점은 사용자 프로필 정보를 가리킵니다.

    클라이언트 인증

    클라이언트 인증 방법 Red Hat Single Sign-On에서 인증 코드 흐름과 함께 사용합니다. 개인 키로 JWT 서명의 경우 Red Hat Single Sign-On은 영역 개인 키를 사용합니다. 다른 경우에는 클라이언트 시크릿을 정의합니다. 자세한 내용은 클라이언트 인증 사양 을 참조하십시오.

    클라이언트 ID

    OIDC 클라이언트 역할을 외부 IDP에 대한 영역입니다. 인증 코드 흐름을 사용하여 외부 IDP와 상호 작용하는 경우 영역에 OIDC 클라이언트 ID가 있어야 합니다.

    클라이언트 시크릿

    외부 자격 증명 모음 의 클라이언트 시크릿 . 인증 코드 흐름을 사용하는 경우 이 시크릿이 필요합니다.

    클라이언트 지원 서명 알고리즘

    서명 알고리즘: JWT 어설션을 클라이언트 인증으로 생성합니다. JWT의 경우 개인 키 또는 클라이언트 시크릿을 jwt로 서명해야 합니다. 알고리즘을 지정하지 않으면 다음 알고리즘이 적용됩니다. RS256 은 개인 키로 서명된 JWT의 경우 조정됩니다. client secret이 jwt인 경우 = 256 이 조정됩니다.

    issuer

    Red Hat Single Sign-On은 발급자 클레임을 IDP의 응답에서 이 값에 대해 검증합니다.

    기본 범위

    OIDC 범위 목록 Red Hat Single Sign-On은 인증 요청을 통해 보냅니다. 기본값은 openid 입니다. 공백은 각 범위를 구분합니다.

    prompt

    OIDC 사양의 prompt 매개변수입니다. 이 매개변수를 통해 재인증 및 기타 옵션을 강제 적용할 수 있습니다. 자세한 내용은 사양을 참조하십시오.

    클라이언트에서 prompt=none forward 허용

    IDP에서 prompt=none 쿼리 매개변수가 포함된 전달 인증 요청을 수락하도록 지정합니다. 영역이 prompt=none 을 사용하여 auth 요청을 수신하는 경우, 영역에서 사용자가 현재 인증되었는지 확인하고 사용자가 로그인하지 않은 경우 login_required 오류를 반환합니다. Red Hat Single Sign-On에서 auth 요청에 대한 기본 IDP(K c_idp_hint 쿼리 매개변수 또는 영역의 기본 IDP 사용)를 결정하는 경우 prompt=none 을 사용하여 auth 요청을 기본 IDP로 전달할 수 있습니다. 기본 IDP는 사용자 인증을 확인합니다. 모든 IDP가 prompt=none 을 사용한 요청을 지원하지 않기 때문에 Red Hat Single Sign-On은 이 스위치를 사용하여 기본 IDP가 인증 요청을 리디렉션하기 전에 매개변수를 지원함을 나타냅니다.

    사용자가 IDP에서 인증되지 않은 경우에도 클라이언트는 여전히 login_required 오류가 발생합니다. 사용자가 IDP에서 인증되면 Red Hat Single Sign-On에서 사용자 상호 작용이 필요한 인증 페이지를 표시해야 하는 경우 클라이언트는 interaction_required 오류가 계속 표시될 수 있습니다. 이 인증에는 필요한 작업(예: 암호 변경), 첫 번째 브로커 로그인 흐름 또는 브로커 로그인 흐름에서 표시하도록 설정된 화면이 포함됩니다.

    서명 검증

    Red Hat Single Sign-On이 이 IDP에서 서명한 외부 ID 토큰의 서명을 확인하는지 여부를 지정합니다. ON 인 경우 Red Hat Single Sign-On은 외부 OIDC IDP의 공개 키를 알아야 합니다. 성능 목적으로 Red Hat Single Sign-On은 외부 OIDC ID 공급자의 공개 키를 캐시합니다. ID 공급자의 개인 키가 손상된 경우 키를 업데이트하고 키 캐시를 지웁니다. 자세한 내용은 캐시 섹션 삭제를 참조하십시오.

    Use JWKS URL

    이 스위치는 검증 서명이 ON 경우 적용됩니다. JWKS URL 사용이 ON 인 경우 Red Hat Single Sign-On은 JWKS URL에서 IDP 공개 키를 다운로드합니다. ID 공급자가 새 키 쌍을 생성할 때 새 키가 다운로드됩니다. OFF 인 경우 Red Hat Single Sign-On은 데이터베이스의 공개 키(또는 인증서)를 사용하므로 IDP 키 쌍이 변경되면 새 키를 Red Hat Single Sign-On 데이터베이스로 가져옵니다.

    JWKS URL

    IDP JWK 키의 위치를 가리키는 URL입니다. 자세한 내용은 JWK 사양 을 참조하십시오. 외부 Red Hat Single Sign-On을 IDP로 사용하는 경우 중개 Red Hat Single Sign-On이 http://broker-keycloak:8180 에서 실행되고 해당 영역이 테스트 되는 경우 http://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certs 과 같은 URL을 사용할 수 있습니다.

    공개 키 검증

    Red Hat Single Sign-On에서 외부 IDP 서명을 확인하는 데 사용하는 PEM 형식의 공개 키입니다. 이 키는 JWKS URL 사용이 OFF 인 경우에 적용됩니다.

    공개 키 유효성 검사

    이 설정은 JWKS URL 사용이 OFF 인 경우에 적용됩니다. 이 설정은 PEM 형식의 공개 키 ID를 지정합니다. 키 ID를 컴퓨팅할 수 있는 표준 방법이 없기 때문에 외부 ID 공급자는 Red Hat Single Sign-On에서 사용하는 알고리즘과 다른 알고리즘을 사용할 수 있습니다. 이 필드의 값을 지정하지 않으면 Red Hat Single Sign-On은 외부 ID에서 보낸 키 ID에 관계없이 모든 요청에 대해 검증 공개 키를 사용합니다. ON (켜짐) 필드의 값은 Red Hat Single Sign-On에서 공급자의 서명을 검증하기 위해 사용하는 키 ID이며 IDP에서 지정한 키 ID와 일치해야 합니다.

OpenID 공급자 메타데이터를 가리키는 URL 또는 파일을 제공하여 이 모든 구성 데이터를 가져올 수 있습니다. Red Hat Single Sign-On 외부 IDP에 연결하는 경우 < root>/auth/realms/{realm-name}/.well-known/openid-configuration 에서 IDP 설정을 가져올 수 있습니다. 이 링크는 IDP에 대한 메타데이터를 설명하는 JSON 문서입니다.

9.6. SAML v2.0 ID 공급자

Red Hat Single Sign-On은 SAML v2.0 프로토콜을 기반으로 ID 공급자를 중개할 수 있습니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. Add provider 목록에서 SAML v2.0 을 선택합니다.

    ID 공급자 추가

    Add Identity Provider

  3. 초기 구성 옵션을 입력합니다. 구성 옵션에 대한 자세한 내용은 일반 IDP 구성을 참조하십시오. .SAML Config
설정설명

서비스 공급자 엔터티 ID

원격 ID 공급자가 이 서비스 공급자의 요청을 식별하는 데 사용하는 SAML 엔티티 ID입니다. 기본적으로 이 설정은 realms 기본 URL < root>/auth/realms/{realm-name} 로 설정됩니다.

ID 공급자 엔티티 ID

수신된 SAML 어설션에서 Issuer 요소의 유효성을 검사하는 데 사용되는 SAML 엔티티 ID입니다. 비어있는 경우 Issuer validation이 수행되지 않습니다. SAML IDP에서 IDP 엔티티 설명자를 게시하는 경우 이 필드의 값이 지정됩니다.

Single Sign-On 서비스 URL

인증 프로세스를 시작하는 SAML 끝점입니다. SAML IDP에서 IDP 엔티티 설명자를 게시하는 경우 이 필드의 값이 지정됩니다.

단일 로그아웃 서비스 URL

SAML 로그 아웃 끝점입니다. SAML IDP에서 IDP 엔티티 설명자를 게시하는 경우 이 필드의 값이 지정됩니다.

Backchannel Logout

SAML IDP에서 백 채널 로그아웃을 지원하는 경우 이 스위치를 ON 으로 전환합니다.

NameID 정책 형식

이름 식별자 형식에 해당하는 URI 참조입니다. 기본적으로 Red Hat Single Sign-On은 urn:oasis:names:tc:SAML:2.0:nameid-format:persistent 로 설정합니다.

주요 유형

외부 사용자 ID를 식별하고 추적하는 데 사용할 SAML 어설션의 부분을 지정합니다. Subject NameID 또는 SAML 속성(이름 또는 친숙한 이름)일 수 있습니다. subject NameID 값은 'urn:oasis:names:tc:SAML:nameid-format:transient' NameID Policy Format 값과 함께 설정할 수 없습니다.

주요 속성

Principal 유형이 공백이 아닌 경우 이 필드는 식별 특성의 이름("Attribute [Name]") 또는 친숙한 이름("Attribute [Friendly Name]")을 지정합니다.

allow create

외부 ID 공급자가 주체를 나타내는 새 ID를 생성하도록 허용합니다.

HTTP-ECDHE 바인딩 응답

외부 IDP에서 보낸 모든 SAML 요청에 대한 응답으로 SAML 바인딩을 제어합니다. OFF 인 경우 Red Hat Single Sign-On에서는 리디렉션 바인딩을 사용합니다.

AuthnRequest의 HTTP-ECDHE 바인딩

외부 IDP에서 인증을 요청할 때 SAML 바인딩을 제어합니다. OFF 인 경우 Red Hat Single Sign-On에서는 리디렉션 바인딩을 사용합니다.

AuthnRequests 서명 필요

ON (켜짐)인 경우 Red Hat Single Sign-On은 영역의 키 쌍을 사용하여 외부 SAML IDP로 전송된 요청에 서명합니다.

서명 알고리즘

iPXE AuthnRequests SignedON 인 경우 사용할 서명 알고리즘입니다.

SAML 서명 키 이름

POST 바인딩을 사용하여 보낸 서명된 SAML 문서에는 기본적으로 Red Hat Single Sign-On 키 ID가 포함된 KeyName 요소의 서명 키 식별이 포함됩니다. 외부 SAML IDP는 다른 키 이름을 기대할 수 있습니다. 이 스위치는 KeyName 포함 여부를 * KEY_ID - Key ID로 제어합니다. * rightsRT_SUBJECT - 영역 키에 해당하는 인증서의 주체입니다. Microsoft Active Directory 페더레이션 서비스는 ovirtRT _SUBJECT 를 예상합니다. * NONE - Red Hat Single Sign-On에서는 SAML 메시지에서 주요 이름 힌트를 생략합니다.

강제 인증

사용자가 이미 로그인한 경우에도 사용자가 외부 IDP에 자격 증명을 입력해야 합니다.

서명 검증

ON 영역에서는 SAML 요청 및 외부 IDP의 응답이 디지털 서명될 것으로 예상합니다.

X509 인증서 검증

Red Hat Single Sign-On에서 사용하는 공개 인증서에서 SAML 요청 서명과 외부 IDP의 응답의 유효성을 검사합니다.

서비스 공급자 메타데이터 서명

ON 인 경우 Red Hat Single Sign-On은 영역의 키 쌍을 사용하여 SAML 서비스 공급자 메타데이터 설명자에 서명합니다.

합격 주체

Red Hat Single Sign-On이 login_hint 쿼리 매개변수를 IDP에 전달하는지 여부를 제어합니다. Red Hat Single Sign-On은 AuthnRequest's Subject의 login_hint 매개변수에 이 필드의 값을 추가하여 대상 공급자가 로그인 양식을 미리 채울 수 있도록 합니다.

서비스 인덱스를 사용하는 특성

원격 IDP에 요청하도록 설정된 속성을 식별합니다. Red Hat Single Sign-On은 ID 공급자 구성에 매핑된 속성을 자동 생성된 SP 메타데이터 문서에 자동으로 추가합니다.

서비스 이름 사용 특성

자동 생성된 SP 메타데이터 문서에 공개된 속성 집합에 대한 설명이 포함된 이름입니다.

외부 IDP의 SAML IDP 엔티티 설명자를 가리키는 URL 또는 파일을 제공하여 모든 구성 데이터를 가져올 수 있습니다. Red Hat Single Sign-On 외부 IDP에 연결하는 경우 URL < root>/auth/realms/{realm-name}/protocol/saml/descriptor 에서 IDP 설정을 가져올 수 있습니다. 이 링크는 IDP에 대한 메타데이터를 설명하는 XML 문서입니다. 연결할 외부 SAML IDP 엔터티 설명자를 가리키는 URL 또는 XML 파일을 제공하여 이 구성 데이터를 모두 가져올 수도 있습니다.

9.6.1. 특정 AuthnContexts 요청

ID 공급자를 사용하면 사용자 ID를 확인하는 인증 방법에 대한 제약 조건을 지정하는 클라이언트를 용이하게 합니다. 예를 들어 MFA, Kerberos 인증 또는 보안 요구 사항을 요청합니다. 이러한 제약 조건은 특정 AuthnContext 기준을 사용합니다. 클라이언트는 하나 이상의 기준을 요청하고 ID 공급자가 요청된 AuthnContext와 정확히 일치하는 방법을 지정할 수 있습니다.

Requested AuthnContext Constraints 섹션에 ClassRefs 또는 DeclRefs를 추가하여 서비스 공급자에 필요한 조건을 나열할 수 있습니다. 일반적으로 ClassRefs 또는 DeclRefs를 제공해야 하므로 지원되는 ID 공급자 설명서를 확인하십시오. ClassRefs 또는 DeclRefs가 없는 경우 ID 공급자는 추가 제약 조건을 적용하지 않습니다.

표 9.3. 요청된 AuthnContext 제약 조건
설정설명

비교

ID 공급자가 컨텍스트 요구 사항을 평가하는 데 사용하는 방법입니다. 사용 가능한 값은 Exact,Minimum,Maximum, 또는ECDHE 입니다. 기본값은 Exact 입니다.

AuthnContext ClassRefs

필수 기준을 설명하는 AuthnContext ClassRefs.

AuthnContext DeclRefs

필수 기준을 설명하는 AuthnContext DeclRefs.

9.6.2. SP 설명자

공급자의 SAML SP 메타데이터에 액세스할 때 ID 공급자 구성 설정에서 Endpoints 항목을 찾습니다. 서비스 공급자에 대한 SAML 엔티티 설명자를 생성하는 SAML 2.0 서비스 공급자 메타데이터 링크가 포함되어 있습니다. 설명자를 다운로드하거나 URL을 복사한 다음 원격 ID 공급자로 가져올 수 있습니다.

이 메타데이터는 다음 URL로 이동하여 공개적으로 사용할 수도 있습니다.

http[s]://{host:port}/auth/realms/{realm-name}/broker/{broker-alias}/endpoint/descriptor

설명자에 액세스하기 전에 구성 변경 사항을 저장하십시오.

9.6.3. SAML 요청에서 주체 보내기

기본적으로 SAML ID 공급자를 가리키는 소셜 버튼은 사용자를 다음 로그인 URL로 리디렉션합니다.

http[s]://{host:port}/auth/realms/${realm-name}/broker/{broker-alias}/login

이 URL에 login_hint 라는 쿼리 매개변수를 추가하면 매개변수의 값이 SAML 요청에 주체 속성으로 추가됩니다. 이 쿼리 매개변수가 비어 있으면 Red Hat Single Sign-On에서 요청에 제목을 추가하지 않습니다.

"Pass subject" 옵션을 활성화하여 SAML 요청에서 주체를 보냅니다.

9.7. 클라이언트 제안 ID 공급자

OIDC 애플리케이션은 사용하려는 ID 공급자를 안내하여 Red Hat Single Sign-On 로그인 페이지를 바이패스할 수 있습니다. 인증 코드 흐름 권한 부여 끝점에서 kc_idp_hint 쿼리 매개변수를 설정하여 활성화할 수 있습니다.

Red Hat Single Sign-On OIDC 클라이언트 어댑터를 사용하면 애플리케이션의 보안 리소스에 액세스할 때 이 쿼리 매개변수를 지정할 수 있습니다.

예를 들면 다음과 같습니다.

GET /myapplication.com?kc_idp_hint=facebook HTTP/1.1
Host: localhost:8080

이 경우 영역에는 facebook 별칭이 있는 ID 공급자가 있어야 합니다. 이 공급자가 없는 경우 로그인 양식이 표시됩니다.

keycloak.js 어댑터를 사용하는 경우 다음과 동일한 동작을 수행할 수도 있습니다.

const keycloak = new Keycloak('keycloak.json');

keycloak.createLoginUrl({
	idpHint: 'facebook'
});

kc_idp_hint 쿼리 매개변수를 사용하면 ID 공급자 Redirector authenticator에 대해 클라이언트를 구성하는 경우 클라이언트가 기본 ID 공급자를 덮어쓸 수 있습니다. 클라이언트는 kc_idp_hint 쿼리 매개변수를 빈 값으로 설정하여 자동 리디렉션을 비활성화할 수 있습니다.

9.8. 클레임 및 어설션 매핑

인증 중인 외부 IDP에서 제공하는 SAML 및 OpenID Connect 메타데이터를 영역으로 가져올 수 있습니다. 가져온 후에는 사용자 프로필 메타데이터 및 기타 정보를 추출하여 애플리케이션에서 사용할 수 있도록 할 수 있습니다.

외부 ID 공급자를 사용하여 영역에 로그인하는 각 사용자는 SAML 또는 OIDC 어설션 및 클레임의 메타데이터를 기반으로 로컬 Red Hat Single Sign-On 데이터베이스에 항목이 있습니다.

절차

  1. 메뉴에서 Identity Providers 를 클릭합니다.
  2. 목록에서 ID 공급자 중 하나를 선택합니다.
  3. Mappers 탭을 클릭합니다.

    ID 공급자 매퍼

    identity provider mappers

  4. 생성을 클릭합니다.

    ID 공급자 매퍼

    identity provider mapper

  5. Sync Mode Override 에 대한 값을 선택합니다. 매퍼는 이 설정에 따라 사용자가 반복적으로 로그인할 때 사용자 정보를 업데이트합니다.

    1. 이전 Red Hat Single Sign-On 버전의 동작을 사용하려면 legacy 를 선택합니다.
    2. Red Hat Single Sign-On에 처음 로그인할 때 특정 ID 공급자를 사용하여 Red Hat Single Sign-On에 처음 로그인할 때 가져오기를 선택하여 데이터를 가져옵니다.
    3. force 를 선택하여 각 사용자 로그인 시 사용자 데이터를 업데이트합니다.
    4. ID 공급자에 구성된 동기화 모드를 사용하려면 상속 을 선택합니다. 다른 모든 옵션은 이 동기화 모드를 재정의합니다.
  6. Mapper Type (매퍼 유형) 목록에서 매퍼를 선택합니다. 매퍼(mapper)에 들어갈 구성에 대한 설명에 대해 Mapper Type (매퍼 유형)을 마우스로 가리킵니다.
  7. 저장을 클릭합니다.

JSON 기반 클레임의 경우 중첩 및 대괄호로 묶은 점 표기법을 사용하여 인덱스로 배열 필드에 액세스할 수 있습니다. 예를 들면 contact.address[0].country 입니다.

소셜 공급자가 제공하는 사용자 프로필 JSON 데이터의 구조를 조사하려면 서버의 app-server 구성 파일(domain.xml 또는 standalone.xml)에서 DEBUG 수준 로거 org.keycloak.social.user_profile_dump 를 활성화할 수 있습니다.

9.9. 사용 가능한 사용자 세션 데이터

외부 IDP에서 사용자가 로그인한 후 Red Hat Single Sign-On은 액세스할 수 있는 사용자 세션 노트 데이터를 저장합니다. 이 데이터는 토큰 또는 SAML 어설션을 사용하여 적절한 클라이언트 매퍼를 사용하여 클라이언트에 다시 전달된 로그인을 요청하는 클라이언트에 전파될 수 있습니다.

identity_provider
로그인을 수행하는 데 사용되는 브로커의 IDP 별칭입니다.
identity_provider_identity
현재 인증된 사용자의 IDP 사용자 이름입니다. Red Hat Single Sign-On 사용자 이름과 동일한 경우가 많지만 항상 그런 것은 아닙니다. 예를 들어 Red Hat Single Sign-On은 사용자 john'을 Facebook 사용자 john123@gmail.com 에 연결할 수 있습니다. 이 경우 사용자 세션 노트 값은 john123@gmail.com 입니다.

사용자 세션 노트 유형의 프로토콜 매퍼 를 사용하여 이 정보를 클라이언트에 전파할 수 있습니다.

9.10. 첫 번째 로그인 흐름

사용자가 ID 브로커를 통해 로그인하면 Red Hat Single Sign-On은 영역의 로컬 데이터베이스 내에서 사용자의 측면을 가져와서 링크합니다. Red Hat Single Sign-On이 외부 ID 공급자를 통해 사용자를 성공적으로 인증하면 다음 두 가지 상황이 발생할 수 있습니다.

  • Red Hat Single Sign-On은 이미 인증된 ID 공급자 계정으로 사용자 계정을 가져오고 연결했습니다. 이 경우 Red Hat Single Sign-On은 기존 사용자로 인증되고 다시 애플리케이션으로 리디렉션됩니다.
  • Red Hat Single Sign-On에 이 사용자에 대한 계정이 없습니다. 일반적으로 새 계정을 Red Hat Single Sign-On 데이터베이스에 등록하고 가져오지만 동일한 이메일 주소가 있는 기존 Red Hat Single Sign-On 계정이 있을 수 있습니다. 기존 로컬 계정을 외부 ID 공급자와 자동으로 연결하는 것은 잠재적인 보안 결함입니다. 외부 ID 공급자로부터 얻은 정보를 항상 신뢰할 수는 없습니다.

조직마다 이러한 상황 중 일부를 처리할 때 요구 사항이 다릅니다. Red Hat Single Sign-On을 사용하면 IDP 설정에서 First Login Flow 옵션을 사용하여 외부 IDP에서 로그인하는 사용자에 대한 워크플로 를 처음 선택할 수 있습니다. 기본적으로 첫 번째 로그인 흐름 옵션은 첫 번째 브로커 로그인 흐름을 가리키지만 다른 ID 공급자에 대한 흐름 또는 다른 흐름을 사용할 수 있습니다.By default, the First Login Flow option points to the first broker login flow, but you can use your flow or different flows for different identity providers.

흐름은 인증 탭의 Admin Console에 있습니다. 첫 번째 브로커 로그인 흐름을 선택하면 기본적으로 사용되는 인증자가 표시됩니다. 기존 흐름을 다시 설정할 수 있습니다. 예를 들어 일부 인증기를 비활성화하고, 일부를 필요에 따라 표시하거나, 일부 인증자를 구성할 수 있습니다.

9.10.1. 기본 첫 번째 로그인 흐름 인증기

프로필 검토
  • 이 인증기에는 프로필 정보 페이지가 표시되므로 사용자는 ID 공급자에서 Red Hat Single Sign-On에서 검색하는 프로필을 검토할 수 있습니다.
  • Actions 메뉴에서 Update Profile On First Login 옵션을 설정할 수 있습니다.
  • ON 으로 하면 사용자 ID를 페더레이션하기 위해 추가 정보를 요청하는 프로필 페이지가 사용자에게 제공됩니다.
  • 누락된 경우 ID 공급자가 이메일, 이름 또는 성과 같은 필수 정보를 제공하지 않는 경우 프로필 페이지가 표시됩니다.
  • OFF 인 경우 사용자가 Confirm Link Existing Account authenticator에 표시된 페이지의 Review profile info 링크에서 이후 단계를 클릭하지 않는 한 프로필 페이지가 표시되지 않습니다.
고유한 경우 사용자 생성

이 인증자는 ID 공급자의 계정과 동일한 이메일 또는 사용자 이름이 이미 있는 기존 Red Hat Single Sign-On 계정이 있는지 확인합니다. 그렇지 않은 경우 인증자는 새 로컬 Red Hat Single Sign-On 계정을 생성하여 ID 공급자와 연결하므로 전체 흐름이 완료됩니다. 그렇지 않으면 다음 Handle Existing Account 하위 흐름으로 이동합니다. 중복된 계정이 없음을 항상 확인하려면 이 인증 프로그램을 REQUIRED 로 표시할 수 있습니다. 이 경우 기존 Red Hat Single Sign-On 계정이 있고 사용자가 계정 관리를 통해 ID 공급자 계정을 연결해야 하는 경우 오류 페이지가 표시됩니다.

  • 이 인증자는 ID 공급자 계정과 동일한 이메일 또는 사용자 이름을 가진 Red Hat Single Sign-On 계정이 이미 있는지 확인합니다.
  • 계정이 없는 경우 인증자는 로컬 Red Hat Single Sign-On 계정을 생성하고 이 계정을 ID 공급자와 연결한 후 흐름을 종료합니다.
  • 계정이 있는 경우 인증자는 다음 Handle Existing Account 하위 흐름을 구현합니다.
  • 중복된 계정이 없는지 확인하려면 이 인증을 REQUIRED 로 표시할 수 있습니다. 사용자가 Red Hat Single Sign-On 계정이 있고 계정 관리를 통해 ID 공급자 계정을 연결해야 하는 경우 오류 페이지가 표시됩니다.
링크 기존 계정 확인
  • 정보 페이지에서 사용자는 동일한 이메일의 Red Hat Single Sign-On 계정을 볼 수 있습니다. 사용자는 프로필을 다시 검토하고 다른 이메일 또는 사용자 이름을 사용할 수 있습니다. 흐름이 다시 시작되고 Review Profile authenticator로 돌아갑니다.
  • 또는 사용자가 ID 공급자 계정을 기존 Red Hat Single Sign-On 계정과 연결할지 확인할 수 있습니다.
  • 사용자가 이 확인 페이지를 보고 이메일 확인 또는 재인증을 통해 ID 공급자 계정을 바로 연결하는 것을 원하지 않는 경우 이 인증 정보를 비활성화합니다.
이메일별 기존 계정 확인
  • 이 인증자는 기본적으로 iPXEN ATIVE입니다. Red Hat Single Sign-On은 영역에 SMTP 설정이 구성된 경우 이 인증자를 사용합니다.
  • authenticator는 사용자에게 이메일을 전송하여 ID 공급자를 Red Hat Single Sign-On 계정과 연결하려는지 확인합니다.
  • 이메일을 통해 링크를 확인하지 않고 사용자가 암호를 다시 인증하도록 하려면 이 인증기를 비활성화합니다.
재인증으로 기존 계정 확인
  • 이메일 인증기를 사용할 수 없는 경우 이 인증기를 사용합니다. 예를 들어 영역에 대해 SMTP를 구성하지 않았습니다. 이 인증기에는 사용자가 인증하여 Red Hat Single Sign-On 계정을 ID 공급자와 연결할 수 있는 로그인 화면이 표시됩니다.
  • 사용자는 Red Hat Single Sign-On 계정에 이미 연결된 다른 ID 공급자로 다시 인증할 수도 있습니다.
  • 사용자가 OTP를 사용하도록 강제할 수 있습니다. 그렇지 않으면 사용자 계정에 OTP를 설정한 경우 선택 사항이며 사용됩니다.

9.10.3. 자동 사용자 생성 비활성화

Default 첫 번째 로그인 흐름은 외부 ID와 일치하는 Red Hat Single Sign-On 계정을 조회하여 링크를 제공합니다. 일치하는 Red Hat Single Sign-On 계정이 없으면 흐름이 자동으로 생성됩니다.

이 기본 동작은 일부 설정에 적합하지 않을 수 있습니다. 한 가지 예는 모든 사용자가 미리 생성된 읽기 전용 LDAP 사용자 저장소를 사용하는 경우입니다. 이 경우 자동 사용자 생성을 전환해야 합니다.

사용자 생성을 비활성화하려면 다음을 수행합니다.

절차

  1. 메뉴에서 인증을 클릭합니다.
  2. 목록에서 First Broker Login 을 선택합니다.
  3. Create user if unique to DISABLED 를 설정합니다.
  4. Link Existing AccountDISABLED 로 설정합니다.

또한 Red Hat Single Sign-On 자체는 외부 ID에 해당하는 내부 계정을 확인할 수 없습니다. 따라서 Verify Existing Account By Re-authentication authenticator는 사용자에게 사용자 이름과 암호를 모두 제공하도록 요청합니다.

9.10.4. 기존 사용자 첫 번째 로그인 흐름 감지

다음과 같은 첫 번째 로그인 흐름을 구성하려면 다음을 수행합니다.

  • 이 영역에 이미 등록된 사용자만 로그인할 수 있습니다.
  • 사용자는 메시지가 표시되지 않고 자동으로 연결됩니다.

다음 두 개의 인증기를 사용하여 새 흐름을 만듭니다.

기존 브로커 사용자 감지
이 인증기를 통해 고유한 사용자가 처리됩니다. 인증기 요구 사항을 Mandatory 로 설정합니다.
기존 사용자 자동 설정
확인 없이 기존 사용자를 인증 컨텍스트로 자동 설정합니다. 인증기 요구 사항을 Mandatory 로 설정합니다.

ID 공급자 구성의 첫 번째 로그인 흐름을 해당 흐름에 설정해야 합니다. 사용자 프로필(Last Name, First Name…​)을 ID 공급자 속성으로 업데이트하려면 Sync Modeforce 로 설정할 수 있습니다.

참고

이 흐름은 다른 ID 공급자(예: github, facebook …​)에 ID를 위임하지만 로그인할 수 있는 사용자를 관리하려는 경우 사용할 수 있습니다.

이 구성을 사용하면 Red Hat Single Sign-On에서 외부 ID에 해당하는 내부 계정을 확인할 수 없습니다. Re-authentication 인증 정보 확인 에서 공급자에게 사용자 이름 및 암호를 요청합니다.

9.11. 외부 IDP 토큰 검색

Red Hat Single Sign-On을 사용하면 IDP 설정 페이지에서 Store Token 구성 옵션을 사용하여 외부 IDP로 인증 프로세스의 토큰과 응답을 저장할 수 있습니다.

애플리케이션 코드는 이러한 토큰과 응답을 검색하여 추가 사용자 정보를 가져오거나 외부 IDP를 안전하게 요청할 수 있습니다. 예를 들어 애플리케이션은 Google 토큰을 사용하여 다른 Google 서비스 및 REST API를 사용할 수 있습니다. 특정 ID 공급자에 대한 토큰을 검색하려면 다음과 같이 요청을 보냅니다.

GET /auth/realms/{realm}/broker/{provider_alias}/token HTTP/1.1
Host: localhost:8080
Authorization: Bearer <KEYCLOAK ACCESS TOKEN>

애플리케이션은 Red Hat Single Sign-On으로 인증하고 액세스 토큰을 받아야 합니다. 이 액세스 토큰에는 브로커 클라이언트 수준 역할 읽기-token 이 설정되어 있어야 하므로 사용자에게 이 역할에 대한 역할 매핑이 있어야 하며 클라이언트 애플리케이션에는 해당 범위 내에 해당 역할이 있어야 합니다. 이 경우 Red Hat Single Sign-On에서 보호되는 서비스에 액세스하므로 사용자 인증 중에 Red Hat Single Sign-On에서 발행한 액세스 토큰을 보냅니다. Stored Tokens Readable 스위치를 ON 으로 설정하여 브로커 구성 페이지에서 새로 가져온 사용자에게 이 역할을 할당할 수 있습니다.

이러한 외부 토큰은 공급자를 통해 다시 로그인하거나 클라이언트 시작 계정 연결 API를 사용하여 다시 설정할 수 있습니다.

9.12. ID 브로커 로그 아웃

로그아웃할 때 Red Hat Single Sign-On은 처음에 로그인하여 이 ID 공급자에서 사용자를 기록하는 데 사용되는 외부 ID 공급자로 요청을 보냅니다. 이 동작을 건너뛰고 외부 ID 공급자에서 로그아웃하지 않도록 할 수 있습니다. 자세한 내용은 어댑터 로그 아웃 설명서 를 참조하십시오.

10장. SSO 프로토콜

이 섹션에서는 인증 프로토콜, Red Hat Single Sign-On 인증 서버 및 애플리케이션이 Red Hat Single Sign-On 인증 서버에서 보호하는 방법에 대해 설명합니다.

10.1. OpenID Connect

OIDC( OpenID Connect )는 OAuth 2.0 의 확장인 인증 프로토콜입니다.

OAuth 2.0은 권한 부여 프로토콜을 구축하기 위한 프레임워크이며 불완전합니다. 그러나 OIDC는 Json Web Token (JWT) 표준을 사용하는 완전한 인증 및 권한 부여 프로토콜입니다. JWT 표준은 단순하고 웹 친화적인 방식으로 데이터를 디지털 서명하고 암호화하는 ID 토큰 JSON 형식 및 방법을 정의합니다.

일반적으로 OIDC는 두 가지 사용 사례를 구현합니다. 첫 번째 사례는 Red Hat Single Sign-On 서버가 사용자를 인증하도록 요청하는 애플리케이션입니다. 로그인에 성공하면 애플리케이션은 ID 토큰과 액세스 토큰 을 수신합니다. ID 토큰 에는 사용자 이름, 이메일 및 프로필 정보를 포함한 사용자 정보가 포함되어 있습니다. 영역은 애플리케이션이 애플리케이션에서 액세스할 수 있는 리소스를 결정하는 데 사용하는 액세스 정보(예: 사용자 역할 매핑)를 포함하는 액세스 토큰 을 디지털 서명합니다.

두 번째 사용 사례는 원격 서비스에 액세스하는 클라이언트입니다.

  • 클라이언트는 사용자를 대신하여 원격 서비스에서 호출하도록 Red Hat Single Sign-On의 액세스 토큰 을 요청합니다.
  • Red Hat Single Sign-On은 사용자를 인증하고 사용자에게 요청하는 클라이언트에 대한 액세스 권한을 부여하는 데 동의하도록 요청합니다.
  • 클라이언트는 영역에 의해 디지털 서명되는 액세스 토큰 을 수신합니다.
  • 클라이언트는 액세스 토큰을 사용하여 원격 서비스에서 REST 요청을 수행합니다.
  • 원격 REST 서비스는 액세스 토큰 을 추출합니다.
  • 원격 REST 서비스는 토큰 서명을 확인합니다.
  • 원격 REST 서비스는 토큰 내의 액세스 정보에 따라 요청을 처리하거나 거부하도록 결정합니다.

10.1.1. OIDC 인증 흐름

OIDC에는 클라이언트 또는 애플리케이션에서 사용자를 인증하고 ID액세스 토큰을 수신하는 데 사용할 수 있는 몇 가지 방법 또는 흐름이 있습니다. 이 방법은 액세스를 요청하는 애플리케이션 또는 클라이언트 유형에 따라 다릅니다.

10.1.1.1. 권한 부여 코드 흐름

권한 부여 코드 Flow는 브라우저 기반 프로토콜이며 브라우저 기반 애플리케이션 인증 및 승인에 적합합니다. 브라우저 리디렉션을 사용하여 ID액세스 토큰을 가져옵니다.

  1. 사용자는 브라우저를 사용하여 애플리케이션에 연결합니다. 애플리케이션은 사용자가 애플리케이션에 로그인하지 않음을 감지합니다.
  2. 애플리케이션은 인증을 위해 브라우저를 Red Hat Single Sign-On으로 리디렉션합니다.
  3. 애플리케이션은 브라우저 리디렉션에서 콜백 URL을 쿼리 매개변수로 전달합니다. Red Hat Single Sign-On은 성공적인 인증 시 매개 변수를 사용합니다.
  4. Red Hat Single Sign-On은 사용자를 인증하고 단시간 동안 임시 코드를 생성합니다.
  5. Red Hat Single Sign-On은 콜백 URL을 사용하여 애플리케이션으로 리디렉션하고 콜백 URL에 임시 코드를 쿼리 매개변수로 추가합니다.
  6. 애플리케이션은 임시 코드를 추출하고 Red Hat Single Sign-On에 대한 백그라운드 REST 호출을 통해 ID액세스새로 고침 토큰의 코드를 교환합니다. 재생 공격을 방지하기 위해 임시 코드는 두 번 이상 사용할 수 없습니다.
참고

시스템은 해당 토큰의 수명 동안 무해한 토큰에 취약합니다. 보안 및 확장성의 이유로 액세스 토큰은 일반적으로 빠르게 만료되도록 설정되므로 후속 토큰 요청이 실패합니다. 토큰이 만료된 경우 애플리케이션은 로그인 프로토콜에서 보낸 추가 새로 고침 토큰을 사용하여 새 액세스 토큰을 가져올 수 있습니다.

기밀 클라이언트는 토큰의 임시 코드를 교환할 때 클라이언트 시크릿을 제공합니다. 클라이언트 시크릿을 제공하기 위해 공용 클라이언트가 필요하지 않습니다. 공용 클라이언트는 HTTPS가 엄격하게 적용되며 클라이언트에 등록된 리디렉션 URI가 엄격하게 제어될 때 안전합니다. HTML5/JavaScript 클라이언트는 클라이언트 시크릿을 HTML5/JavaScript 클라이언트에 안전하게 전송할 수 없기 때문에 공개 클라이언트가 있어야 합니다. 자세한 내용은 클라이언트 관리 장을 참조하십시오.

Red Hat Single Sign-On은 코드 교환에 대한 증명 키 도 지원합니다.

10.1.1.2. 암시적 흐름

Implicit Flow는 브라우저 기반 프로토콜입니다. 권한 부여 코드 흐름과 유사하지만 요청 수가 적고 새로 고침 토큰이 없는 것입니다.

참고

리디렉션 URI를 통해 토큰이 전송될 때 브라우저 기록에 액세스 토큰이 유출될 가능성이 있습니다(아래 참조).

또한 이 흐름은 클라이언트에 새로 고침 토큰을 제공하지 않습니다. 따라서 액세스 토큰은 수명이 길거나 사용자가 만료될 때 다시 인증해야 합니다.

이 흐름을 사용하는 것을 권장하지 않습니다. 이 흐름은 OIDC 및 OAuth 2.0 사양에 있기 때문에 지원됩니다.

이 프로토콜은 다음과 같이 작동합니다.

  1. 사용자는 브라우저를 사용하여 애플리케이션에 연결합니다. 애플리케이션은 사용자가 애플리케이션에 로그인하지 않음을 감지합니다.
  2. 애플리케이션은 인증을 위해 브라우저를 Red Hat Single Sign-On으로 리디렉션합니다.
  3. 애플리케이션은 브라우저 리디렉션에서 콜백 URL을 쿼리 매개변수로 전달합니다. Red Hat Single Sign-On은 성공적인 인증 시 쿼리 매개변수를 사용합니다.
  4. Red Hat Single Sign-On은 사용자를 인증하고 ID액세스 토큰을 생성합니다. Red Hat Single Sign-On은 콜백 URL을 사용하여 애플리케이션으로 리디렉션하고 콜백 URL에서 ID액세스 토큰을 쿼리 매개변수로 추가로 추가합니다.
  5. 애플리케이션은 콜백 URL에서 ID액세스 토큰을 추출합니다.
10.1.1.3. Resource owner password credentials grant (Direct Access Grants)

직접 액세스 권한은 REST 클라이언트가 사용자를 대신하여 토큰을 가져오는 데 사용됩니다. 다음을 포함하는 HTTP POST 요청입니다.

  • 사용자의 자격 증명입니다. 인증 정보는 양식 매개변수로 전송됩니다.
  • 클라이언트의 ID입니다.
  • 고객 시크릿(보통 클라이언트인 경우).

HTTP 응답에는 ID , 액세스 , 새로 고침 토큰이 포함되어 있습니다.

10.1.1.4. 클라이언트 인증 정보 부여

클라이언트 자격 증명 부여 는 외부 사용자를 대신하여 작동하는 토큰을 가져오는 대신 클라이언트와 연결된 서비스 계정의 메타데이터 및 권한에 따라 토큰을 생성합니다. 클라이언트 자격 증명 권한은 REST 클라이언트가 사용합니다.

자세한 내용은 서비스 계정 장을 참조하십시오.

10.1.1.5. 장치 권한 부여

이는 입력 기능이 제한되거나 적절한 브라우저가 없는 인터넷에 연결된 장치에서 실행되는 클라이언트가 사용합니다. 프로토콜에 대한 간단한 요약은 다음과 같습니다.

  1. 애플리케이션은 Red Hat Single Sign-On 장치 코드와 사용자 코드를 요청합니다. Red Hat Single Sign-On은 장치 코드와 사용자 코드를 생성합니다. Red Hat Single Sign-On은 장치 코드 및 사용자 코드를 애플리케이션에 대한 응답을 반환합니다.
  2. 애플리케이션은 사용자에게 사용자 코드 및 확인 URI를 제공합니다. 사용자는 다른 브라우저를 사용하여 인증할 확인 URI에 액세스합니다.
  3. 애플리케이션은 Red Hat Single Sign-On을 반복적으로 폴링하여 사용자가 사용자 권한을 완료했는지 확인합니다. 사용자 인증이 완료되면 애플리케이션은 ID 의 장치 코드,액세스새로 고침 토큰을 교체합니다.
10.1.1.6. 클라이언트 시작 backchannel 인증 권한

이 기능은 OAuth 2.0의 권한 부여 코드 부여와 같은 사용자 브라우저를 통해 리디렉션하지 않고 OpenID 공급자와 직접 통신하여 인증 흐름을 시작하려는 클라이언트가 사용합니다. 프로토콜에 대한 간단한 요약은 다음과 같습니다.

  1. 클라이언트는 클라이언트가 만든 인증 요청을 식별하는 auth_req_id를 Red Hat Single Sign-On을 요청합니다. Red Hat Single Sign-On은 auth_req_id를 생성합니다.
  2. 이 auth_req_id를 수신한 후 이 클라이언트는 auth_req_id에 대해 반환하여 액세스 토큰, 새로 고침 토큰 및 ID 토큰을 받기 위해 Red Hat Single Sign-On을 반복적으로 폴링해야 합니다.

관리자는 CIBA(Client Initiated Backchannel Authentication) 관련 작업을 영역당 CIBA 정책 으로 구성할 수 있습니다.

또한 보안 애플리케이션 및 서비스 가이드의 Backchannel Authentication Endpoint 섹션 및 보안 애플리케이션 및 서비스 가이드의 클라이언트 Initiated Backchannel Authentication Grant 섹션 과 같은 Red Hat Single Sign-On 설명서의 다른 위치를 참조하십시오.

10.1.1.6.1. CIBA 정책

관리자는 관리 콘솔에서 다음 작업을 수행합니다.

  • 인증 → CIBA 정책 탭을 엽니다.
  • 항목을 구성하고 저장 을 클릭합니다.

구성 가능한 항목 및 설명은 다음과 같습니다.

설정설명

Backchannel 토큰 전달 모드

CD(Consumption Device)에서 인증 결과 및 관련 토큰을 가져오는 방법을 지정합니다. "poll", "ping" 및 "push"의 세 가지 모드가 있습니다. Red Hat Single Sign-On은 "포일"만 지원합니다. 기본 설정은 "poll"입니다. 이 구성은 필수입니다. 자세한 내용은 CIBA 사양 을 참조하십시오.

만료 위치

인증 요청이 수신되었으므로 초 단위로 "auth_req_id"의 만료 시간입니다. 기본 설정은 120입니다. 이 구성은 필수입니다. 자세한 내용은 CIBA 사양 을 참조하십시오.

간격

CD(Consumption Device)가 토큰 끝점에 대한 요청을 폴링할 때까지 대기하는 간격(초)입니다. 기본 설정은 5입니다. 이 구성은 선택 사항입니다. 자세한 내용은 CIBA 사양 을 참조하십시오.

인증 요청된 사용자 힌트

인증이 요청되는 최종 사용자를 식별하는 방법입니다. 기본 설정은 "login_hint"입니다. "login_hint", "login_hint_token" 및 "id_token_hint"의 세 가지 모드가 있습니다. Red Hat Single Sign-On은 "login_hint"만 지원합니다. 이 구성은 필수입니다. 자세한 내용은 CIBA 사양 을 참조하십시오.

10.1.1.6.2. 공급자 설정

CIBA 권한 부여에서는 다음 두 공급자를 사용합니다.

  1. 인증 채널 공급자: Red Hat Single Sign-On과 AD(Authentication Device)를 통해 사용자를 실제로 인증하는 엔티티 간의 통신을 제공합니다.
  2. User Resolver Provider : Red Hat Single Sign-On의 UserModel 을 클라이언트가 제공하는 정보를 통해 사용자를 식별하십시오.

Red Hat Single Sign-On에는 두 개의 기본 공급자가 있습니다. 그러나 관리자는 다음과 같이 Authentication Channel Provider를 설정해야 합니다.

<spi name="ciba-auth-channel">
    <default-provider>ciba-http-auth-channel</default-provider>
    <provider name="ciba-http-auth-channel" enabled="true">
        <properties>
            <property name="httpAuthenticationChannelUri" value="https://backend.internal.example.com/auth"/>
        </properties>
    </provider>
</spi>

구성 가능한 항목 및 설명은 다음과 같습니다.

설정설명

httpAuthenticationChannelUri

AD(Authentication Device)를 통해 사용자를 실제로 인증하는 엔티티의 URI를 지정합니다.

10.1.1.6.3. 인증 채널 공급자

CIBA 표준 문서는 AD에서 사용자를 인증하는 방법을 지정하지 않습니다. 따라서 제품의 재량에 따라 구현될 수 있습니다. Red Hat Single Sign-On은 이 인증을 외부 인증 엔티티에 위임합니다. 인증 엔티티와 통신하기 위해 Red Hat Single Sign-On은 인증 채널 공급자를 제공합니다.

Red Hat Single Sign-On 구현에서는 인증 엔티티가 Red Hat Single Sign-On 관리자의 제어 하에 있는 것으로 가정하여 Red Hat Single Sign-On에서 인증 엔티티를 신뢰한다고 가정합니다. Red Hat Single Sign-On 관리자가 제어할 수 없는 인증 엔티티를 사용하지 않는 것이 좋습니다.

인증 채널 공급자는 SPI 공급자로 제공되므로 Red Hat Single Sign-On 사용자는 환경을 충족하기 위해 자체 공급자를 구현할 수 있습니다. Red Hat Single Sign-On은 HTTP를 사용하여 인증 엔티티와 통신하는 HTTP 인증 채널 공급자라는 기본 공급자를 제공합니다.

Red Hat Single Sign-On 사용자의 사용자가 HTTP 인증 채널 공급자를 사용하려면 Red Hat Single Sign-On과 다음 두 부분으로 구성된 인증 엔티티 간의 계약을 알고 있어야 합니다.

인증 위임 요청/응답
Red Hat Single Sign-On은 인증 엔티티로 인증 요청을 보냅니다.
인증 결과 알림/ACK
인증 엔티티는 Red Hat Single Sign-On에 인증 결과를 알립니다.

인증 위임 요청/응답은 다음 메시지로 구성됩니다.

인증 위임 요청
요청은 Red Hat Single Sign-On에서 인증 엔티티로 전송되어 AD에서 사용자 인증을 요청합니다.
POST [delegation_reception]
  • headers
이름현재의설명

Content-Type

application/json

메시지 본문은 json 형식입니다.

권한 부여

베어러 [token]

[token]은 인증 엔티티가 Red Hat Single Sign-On에 인증 결과를 알릴 때 사용됩니다.

  • 매개 변수
유형이름설명

경로

delegation_reception

위임 요청을 수신하기 위해 인증 엔티티에서 제공하는 끝점

  • body
이름설명

login_hint

AD에 의해 인증된 인증 엔티티를 알려줍니다.
기본적으로 사용자의 "사용자 이름"입니다.
이 필드는 필수이며 CIBA 표준 문서로 정의됩니다.

scope

인증된 사용자로부터 인증 엔티티가 동의를 얻는 범위를 알려줍니다.
이 필드는 필수이며 CIBA 표준 문서로 정의됩니다.

is_consent_required

인증 엔티티가 범위에 대한 인증된 사용자의 동의를 받아야 하는지 여부를 표시합니다.
이 필드는 필수입니다.

binding_message

이 값은 사용자가 AD의 인증이 CD에 의해 트리거되었음을 인식할 수 있도록 CD와 AD의 UI 모두에 표시하기위한 것입니다.
이 필드는 선택 사항이며 CIBA 표준 문서로 정의됩니다.

acr_values

CD에서 인증 컨텍스트 클래스 참조를 요청하는 메시지를 표시합니다.
이 필드는 선택 사항이며 CIBA 표준 문서로 정의됩니다.

인증 위임 응답

이 응답은 인증 엔티티에서 Red Hat Single Sign-On으로 반환되어 인증 엔티티가 Red Hat Single Sign-On에서 인증 요청을 수신했음을 알립니다.

  • 응답
HTTP 상태 코드설명

201

인증 위임 요청을 수신했음을 Red Hat Single Sign-On에 알립니다.

인증 결과 알림/ACK는 다음 메시지로 구성됩니다.

인증 결과 알림
인증 엔티티는 인증 요청 결과를 Red Hat Single Sign-On으로 전송합니다.
POST /auth/realms/[realm]/protocol/openid-connect/ext/ciba/auth/callback
  • headers
이름현재의설명

Content-Type

application/json

메시지 본문은 json 형식입니다.

권한 부여

베어러 [token]

[token]은 인증 위임 요청의 Red Hat Single Sign-On에서 받은 인증 엔티티여야 합니다.

  • 매개 변수
유형이름설명

경로

영역

영역 이름

  • body
이름설명

status

AD에 의해 사용자 인증의 결과를 알려줍니다.
이는 다음 상태 중 하나여야 합니다.
SUCCEED: AD의 인증이 성공적으로 완료되었습니다.
UNAUTHORIZED : AD의 인증이 완료되지 않았습니다.
사용자가 AD 인증이 취소되었습니다.The authentication by AD has been canceled by the user.

인증 결과 ACK

이 응답은 Red Hat Single Sign-On에서 인증 엔티티로 반환되어 Red Hat Single Sign-On에 인증 엔티티로부터 AD에 의해 사용자 인증 결과를 수신했습니다.

  • 응답
HTTP 상태 코드설명

200

인증 결과에 대한 알림을 수신하는 인증 엔티티에 알립니다.

10.1.1.6.4. User Resolver Provider

동일한 사용자가 표시되는 경우에도 CD, Red Hat Single Sign-On 및 인증 엔티티가 다를 수 있습니다.

CD의 경우 Red Hat Single Sign-On과 동일한 사용자를 인식하기 위한 인증 엔티티의 경우, 이 User Resolver 공급자는 자체 사용자 표현을 변환합니다.

사용자 해결 공급자는 SPI 공급자로 제공되므로 Red Hat Single Sign-On 사용자는 환경을 충족하기 위해 자체 공급자를 구현할 수 있습니다. Red Hat Single Sign-On은 다음과 같은 특성을 가진 기본 사용자 Resolver Provider라는 기본 공급자를 제공합니다.

  • login_hint 매개변수만 지원하며 기본값으로 사용됩니다.
  • Red Hat Single Sign-On에서 UserModel 사용자 이름은 CD, Red Hat Single Sign-On 및 인증 엔티티를 나타내는 데 사용됩니다.

10.1.2. OIDC Logout

OIDC에는 로그 아웃 메커니즘과 관련된 네 가지 사양이 있습니다. 이러한 사양은 프로젝트 상태에 있습니다.

이 모든 것이 OIDC 사양에 설명되어 있기 때문에 여기에 간단한 개요만 제공합니다.

10.1.2.1. 세션 관리

이는 브라우저 기반 로그 아웃입니다. 애플리케이션은 정기적으로 Red Hat Single Sign-On에서 세션 상태 정보를 가져옵니다. 세션이 Red Hat Single Sign-On에서 종료되면 애플리케이션은 이를 확인하고 자체 로그아웃을 트리거합니다.

10.1.2.2. RP-Initiated Logout

이는 또한 사용자를 Red Hat Single Sign-On의 특정 엔드포인트로 리디렉션하여 로그아웃이 시작되는 브라우저 기반 로그 아웃이기도 합니다. 이 리디렉션은 일반적으로 사용자가 일부 애플리케이션의 페이지에서 Log Out 링크를 클릭하면 발생합니다. 이 링크는 이전에 Red Hat Single Sign-On을 사용하여 사용자를 인증했습니다.

사용자가 로그아웃 끝점으로 리디렉션되면 Red Hat Single Sign-On은 클라이언트에 로그 아웃 요청을 전송하여 로컬 사용자 세션을 무효화하고 로그아웃 프로세스가 완료되면 사용자를 일부 URL로 리디렉션할 것입니다. id_token_hint 매개변수를 사용하지 않은 경우 사용자가 선택적으로 logout을 확인하도록 요청할 수 있습니다. 로그아웃 후 매개 변수로 제공된 경우 사용자가 지정된 post_logout_redirect_uri 로 자동 리디렉션됩니다. post_logout_redirect_uri 가 포함된 경우 client_id 또는 id_token_hint 매개변수를 포함해야 합니다. post_logout_redirect_uri 매개변수는 클라이언트 구성에 지정된 Valid Post Logout Redirect URI 중 하나와 일치해야 합니다.

클라이언트 구성에 따라 로그 아웃 요청을 프런트채널 또는 백 채널을 통해 클라이언트에 보낼 수 있습니다. 이전 섹션에 설명된 세션 관리에 의존하는 프런트 엔드 브라우저 클라이언트의 경우 Red Hat Single Sign-On은 로그 아웃 요청을 보낼 필요가 없습니다. 이 클라이언트는 브라우저에서 SSO 세션을 자동으로 감지합니다.

10.1.2.3. allchannel Logout

프론트 채널을 통해 로그 아웃 요청을 수신하도록 클라이언트를 구성하려면 IRQ -Channel Logout 클라이언트 설정을 참조하십시오. 이 방법을 사용하는 경우 다음 사항을 고려하십시오.

  • Red Hat Single Sign-On에서 보낸 로그아웃 요청은 브라우저와 로그아웃 페이지에 렌더링된 내장된 iframe 에 의존하는 클라이언트에 의존합니다.
  • iframe 을 기반으로 하는 경우 프론트 채널 로그 아웃은 콘텐츠 보안 정책 (CSP)의 영향을 받을 수 있으며 로그아웃 요청이 차단될 수 있습니다.
  • 사용자가 로그아웃 페이지를 렌더링하기 전에 브라우저를 닫으면 로그아웃 요청이 실제로 클라이언트에 전송되기 전에 클라이언트의 해당 세션이 무효화되지 않을 수 있습니다.
참고

사용자를 로그아웃하고 클라이언트에서 세션을 종료하는 보다 안정적이고 안전한 접근 방식을 제공하므로 Back-Channel Logout을 사용하는 것이 좋습니다.

프론트 채널 logout으로 클라이언트가 활성화되지 않은 경우 Red Hat Single Sign-On은 먼저 Back-Channel Logout URL 을 사용하여 백채널을 통해 로그 아웃 요청을 보냅니다. 정의되지 않은 경우 서버는 관리 URL로 대체됩니다.

10.1.2.4. Backchannel Logout

이는 Red Hat Single Sign-On과 클라이언트 간의 직접 백채널 통신을 사용하는 브라우저 기반 로그 아웃입니다. Red Hat Single Sign-On은 Red Hat Single Sign-On에 로그인한 모든 클라이언트에 로그 아웃 토큰이 포함된 HTTP POST 요청을 보냅니다. 이러한 요청은 Red Hat Single Sign-On의 등록된 백채널 로그 아웃 URL로 전송되며 클라이언트 측에서 로그아웃을 트리거해야 합니다.

10.1.3. Red Hat Single Sign-On 서버 OIDC URI 끝점

다음은 Red Hat Single Sign-On에서 게시하는 OIDC 엔드포인트 목록입니다. Red Hat Single Sign-On 클라이언트 어댑터가 OIDC를 사용하여 인증 서버와 통신하는 경우 이러한 끝점을 사용할 수 있습니다. 모두 상대 URL입니다. URL의 루트는 HTTP(S) 프로토콜, 호스트 이름 및 선택적으로 구성됩니다. 예를 들면 다음과 같습니다.

https://localhost:8080/auth
/realms/{realm-name}/protocol/openid-connect/auth
인증 코드 흐름에서 임시 코드를 얻거나 Implicit Flow, Direct Grants 또는 Client Grants를 사용하여 토큰을 얻는 데 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/token
인증 코드 흐름에서 임시 코드를 토큰으로 변환하는 데 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/logout
로그 아웃을 수행하는 데 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/userinfo
OIDC 사양에 설명된 사용자 정보 서비스에 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/revoke
RFC7009 에 설명된 OAuth 2.0 토큰 해지에 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/certs
JSON 웹 토큰(jwks_uri)을 확인하는 데 사용되는 공개 키가 포함된 JSON Web Key Set(JWKS)에 사용됩니다.
/realms/{realm-name}/protocol/openid-connect/auth/device
장치 인증 권한 부여에 사용되어 장치 코드 및 사용자 코드를 가져옵니다.
/realms/{realm-name}/protocol/openid-connect/ext/ciba/auth
이는 클라이언트가 만든 인증 요청을 식별하는 auth_req_id를 가져올 수 있는 클라이언트 초기화 백엔드의 URL 끝점입니다.
/realms/{realm-name}/protocol/openid-connect/logout/backchannel-logout
이는 OIDC 사양에 설명된 백채널 로그 아웃을 수행하기 위한 URL 끝점입니다.

이 모든 항목에서 {realm-name}을 영역 이름으로 바꿉니다.

10.2. SAML

SAML 2.0 은 OIDC와 유사하지만 더 성숙한 사양입니다. CHAP 및 웹 서비스 메시징 사양에서 Descended는 일반적으로 OIDC보다 더 자세합니다. SAML 2.0은 인증 서버와 애플리케이션 간에 XML 문서를 교환하는 인증 프로토콜입니다. XML 서명 및 암호화는 요청 및 응답을 확인하는 데 사용됩니다.

일반적으로 SAML은 두 가지 사용 사례를 구현합니다.

첫 번째 사용 사례는 Red Hat Single Sign-On 서버를 요청하는 애플리케이션이 사용자를 인증하는 것입니다. 로그인에 성공하면 애플리케이션에 XML 문서가 수신됩니다. 이 문서에는 사용자 속성을 지정하는 SAML 어설션이 포함되어 있습니다. 영역은 애플리케이션이 애플리케이션에서 액세스할 수 있는 리소스를 결정하는 데 사용하는 액세스 정보(예: 사용자 역할 매핑)를 포함하는 문서에 디지털 서명합니다.

두 번째 사용 사례는 원격 서비스에 액세스하는 클라이언트입니다. 클라이언트는 사용자를 대신하여 원격 서비스에서 호출하도록 Red Hat Single Sign-On의 SAML 어설션을 요청합니다.

10.2.1. SAML 바인딩

Red Hat Single Sign-On은 세 가지 바인딩 유형을 지원합니다.

10.2.1.1. 리디렉션 바인딩

리디렉션 바인딩은 일련의 브라우저 리디렉션 URI를 사용하여 정보를 교환합니다.

  1. 사용자는 브라우저를 사용하여 애플리케이션에 연결합니다. 애플리케이션에서 사용자가 인증되지 않았음을 감지합니다.
  2. 애플리케이션은 XML 인증 요청 문서를 생성하여 URI에서 쿼리 매개변수로 인코딩합니다. URI는 Red Hat Single Sign-On 서버로 리디렉션하는 데 사용됩니다. 설정에 따라 애플리케이션은 XML 문서에 디지털 서명하고 Red Hat Single Sign-On으로 리디렉션 URI에 서명을 쿼리 매개변수로 포함할 수도 있습니다. 이 서명은 요청을 보내는 클라이언트의 유효성을 확인하는 데 사용됩니다.
  3. 브라우저가 Red Hat Single Sign-On으로 리디렉션됩니다.
  4. 서버는 XML 인증 요청 문서를 추출하고 필요한 경우 디지털 서명을 확인합니다.
  5. 사용자가 인증 자격 증명을 입력합니다.
  6. 인증 후 서버는 XML 인증 응답 문서를 생성합니다. 이 문서에는 이름, 주소, 이메일 및 사용자가 보유한 역할 매핑을 포함하여 사용자에 대한 메타데이터를 보유하는 SAML 어설션이 포함되어 있습니다. 이 문서는 일반적으로 XML 서명을 사용하여 디지털 서명되며, 또한 암호화될 수 있습니다.
  7. XML 인증 응답 문서는 리디렉션 URI에서 쿼리 매개변수로 인코딩됩니다. URI는 브라우저를 애플리케이션으로 다시 가져옵니다. 디지털 서명은 쿼리 매개변수로 포함되어 있습니다.
  8. 애플리케이션은 리디렉션 URI를 수신하고 XML 문서를 추출합니다.
  9. 애플리케이션은 영역의 서명을 확인하여 유효한 인증 응답을 수신하는지 확인합니다. SAML 어설션 내부의 정보는 액세스 결정을 내리거나 사용자 데이터를 표시하는 데 사용됩니다.
10.2.1.2. POST 바인딩

POST 바인딩은 리디렉션 바인딩과 유사하지만 POST 바인딩은 GET 요청을 사용하는 대신 POST 요청을 사용하여 XML 문서를 전송합니다. POST Binding은 JavaScript를 사용하여 브라우저가 문서를 교환할 때 Red Hat Single Sign-On 서버 또는 애플리케이션에 POST 요청을 전송하도록 합니다. HTTP는 JavaScript가 포함된 HTML 양식을 포함하는 HTML 문서를 사용하여 응답합니다. 페이지가 로드되면 JavaScript가 자동으로 양식을 호출합니다.

POST 바인딩은 다음 두 가지 제한으로 인해 권장됩니다.

  • Security ECDHE-ECDHE With Redirect binding, SAML 응답은 URL의 일부입니다. 로그에서 응답을 캡처할 수 있으므로 안전하지 않습니다.
  • HTTP 페이로드의 문서를 전송하면 제한된 URL보다 많은 양의 데이터에 대한 더 많은 범위를 제공합니다.
10.2.1.3. ECP

향상된 클라이언트 또는 프록시(ECP)는 웹 브라우저의 컨텍스트 외부에서 SAML 속성을 교환할 수 있는 SAML v.2.0 프로파일입니다. REST 또는 CHAP 기반 클라이언트에서 자주 사용됩니다.

10.2.2. Red Hat Single Sign-On 서버 SAML URI 끝점

Red Hat Single Sign-On에는 모든 SAML 요청에 대해 하나의 끝점이 있습니다.

http(s)://authserver.host/auth/realms/{realm-name}/protocol/saml

모든 바인딩은 이 끝점을 사용합니다.

10.3. SAML과 OpenID Connect 비교

다음은 프로토콜을 선택할 때 고려해야 할 여러 가지 요인입니다.

대부분의 경우 Red Hat Single Sign-On은 OIDC 사용을 권장합니다.

OIDC

  • OIDC는 웹과 함께 작동하도록 특별히 설계되었습니다.
  • OIDC는 SAML보다 클라이언트 측에서 쉽게 구현할 수 있기 때문에 HTML5/JavaScript 애플리케이션에 적합합니다.
  • OIDC 토큰은 JSON 형식이므로 JavaScript를 더 쉽게 사용할 수 있습니다.
  • OIDC에는 보안을 보다 쉽게 구현할 수 있는 기능이 있습니다. 예를 들어 사양에서 사용자 로그인 상태를 결정하는 데 사용하는 iframe 동작을 참조하십시오.

SAML

  • SAML은 웹에서 작동하도록 계층으로 설계되었습니다.
  • SAML은 OIDC보다 더 자세할 수 있습니다.
  • 사용자는 OIDC를 통해 SAML을 선택하는 것은 성숙한 인식이 있기 때문입니다.
  • 사용자는 OIDC 기존 애플리케이션으로 보안되는 SAML을 선택합니다.

10.4. Docker 레지스트리 v2 인증

참고

Docker 인증은 기본적으로 비활성화되어 있습니다. Docker 인증을 활성화하려면 프로파일을 참조하십시오.

Docker Registry V2 인증 은 Docker 레지스트리에 대해 사용자를 인증하는 OIDC와 유사한 프로토콜입니다. Red Hat Single Sign-On의 이 프로토콜을 구현하면 Docker 클라이언트에서 Red Hat Single Sign-On 인증 서버를 사용하여 레지스트리에 인증할 수 있습니다. 이 프로토콜은 표준 토큰 및 서명 메커니즘을 사용하지만 실제 OIDC 구현과는 다릅니다. 요청 및 응답에 매우 구체적인 JSON 포멧을 사용하고 리포지토리 이름과 권한을 OAuth 범위 메커니즘에 매핑하여 구분합니다.

10.4.1. Docker 인증 흐름

인증 흐름은 Docker API 설명서에 설명되어 있습니다. 다음은 Red Hat Single Sign-On 인증 서버의 관점에서 요약한 것입니다.

  • docker 로그인을 수행합니다.
  • Docker 클라이언트는 Docker 레지스트리의 리소스를 요청합니다. 리소스가 보호되고 요청에 인증 토큰이 없는 경우 Docker 레지스트리 서버는 필요한 권한과 권한 부여 서버의 위치에 대한 일부 정보와 함께 401 HTTP 메시지로 응답합니다.
  • Docker 클라이언트는 Docker 레지스트리에서 401 HTTP 메시지를 기반으로 인증 요청을 구성합니다. 클라이언트는 로컬 캐시된 자격 증명( Docker login 명령에서)을 Red Hat Single Sign-On 인증 서버에 대한 HTTP 기본 인증 요청의 일부로 사용합니다.
  • Red Hat Single Sign-On 인증 서버에서 사용자를 인증하고 OAuth 스타일 전달자 토큰이 포함된 JSON 본문을 반환합니다.
  • Docker 클라이언트는 JSON 응답에서 전달자 토큰을 수신하여 권한 부여 헤더에서 이를 사용하여 보호된 리소스를 요청합니다.
  • Docker 레지스트리는 Red Hat Single Sign-On 서버에서 토큰이 있는 보호 리소스에 대한 새 요청을 받습니다. 레지스트리는 토큰을 검증하고 요청된 리소스(해당하는 경우)에 대한 액세스 권한을 부여합니다.
참고

Red Hat Single Sign-On은 Docker 프로토콜을 사용한 성공적인 인증 후 브라우저 SSO 세션을 생성하지 않습니다. 브라우저 SSO 세션은 토큰을 새로 고치거나 Red Hat Single Sign-On 서버에서 토큰 또는 세션 상태를 가져올 수 없으므로 브라우저 SSO 세션이 필요하지 않으므로 Docker 프로토콜을 사용하지 않습니다. 자세한 내용은 임시 세션 섹션을 참조하십시오.

10.4.2. Red Hat Single Sign-On Docker Registry v2 Authentication Server URI 끝점

Red Hat Single Sign-On에는 모든 Docker auth v2 요청에 대해 하나의 끝점이 있습니다.

http(s)://authserver.host/auth/realms/{realm-name}/protocol/docker-v2

11장. 관리 콘솔에 대한 액세스 제어

Red Hat Single Sign-On에서 생성된 각 영역에는 해당 영역을 관리할 수 있는 전용 관리 콘솔이 있습니다. 마스터 영역은 관리자가 시스템에서 두 개 이상의 영역을 관리할 수 있는 특수 영역입니다. 또한 서버를 관리하기 위해 다른 영역의 사용자에게 세분화된 액세스를 정의할 수도 있습니다. 이 장에서는 이에 대한 모든 시나리오를 다룹니다.

11.1. 마스터 영역 액세스 제어

Red Hat Single Sign-On의 마스터 영역은 특수한 영역이며 다른 영역과 다르게 처리됩니다. Red Hat Single Sign-On 마스터 영역에 있는 사용자는 Red Hat Single Sign-On 서버에 배포된 0개 이상의 영역을 관리할 수 있는 권한을 부여할 수 있습니다. 영역이 생성되면 Red Hat Single Sign-On은 새 영역에 액세스할 수 있는 권한을 세분화하는 다양한 역할을 자동으로 생성합니다. 관리 콘솔 및 관리 REST 엔드포인트에 대한 액세스는 이러한 역할을 마스터 영역의 사용자에게 매핑하여 제어할 수 있습니다. 여러 슈퍼 사용자와 특정 영역만 관리할 수 있는 사용자를 생성할 수 있습니다.

11.1.1. 글로벌 역할

마스터 영역에는 두 개의 영역 수준 역할이 있습니다. 다음은 다음과 같습니다.

  • admin
  • create-realm

admin 역할의 사용자는 슈퍼 사용자이며 서버의 모든 영역을 관리할 수 있는 모든 권한이 있습니다. create-realm 역할을 가진 사용자는 새 영역을 만들 수 있습니다. 새로 생성되는 모든 영역에 대한 전체 액세스 권한이 부여됩니다.

11.1.2. 영역별 역할

마스터 영역 내의 admin 사용자에게는 시스템의 하나 이상의 다른 영역에 관리 권한이 부여될 수 있습니다. Red Hat Single Sign-On의 각 영역은 마스터 영역의 클라이언트로 표시됩니다. 클라이언트의 이름은 < realm name>-realm 입니다. 이러한 클라이언트에는 개별 영역을 관리하기 위해 다양한 액세스 수준을 정의하는 클라이언트 수준 역할이 정의되어 있습니다.

사용 가능한 역할은 다음과 같습니다.

  • view-realm
  • view-users
  • view-clients
  • view-events
  • manage-realm
  • manage-users
  • create-client
  • manage-clients
  • manage-events
  • view-identity-providers
  • manage-identity-providers
  • impersonation

사용자에게 원하는 역할을 할당하고 관리 콘솔의 특정 부분만 사용할 수 있습니다.

중요

manage-users 역할이 있는 관리자는 사용자가 보유한 사용자에게만 관리자 역할을 할당할 수 있습니다. 따라서 관리자에게 manage-users 역할이 있지만 manage-realm 역할이 없는 경우 이 역할을 할당할 수 없습니다.

11.2. 전용 영역 관리 콘솔

각 영역에는 /auth/admin/{realm-name}/console.com으로 이동하여 액세스할 수 있는 전용 Admin Console이 있습니다. 해당 영역에 있는 사용자에게 특정 사용자 역할 매핑을 할당하여 영역 관리 권한을 부여할 수 있습니다.

각 영역에는 realm-management 라는 기본 제공 클라이언트가 있습니다. 영역의 클라이언트 왼쪽 메뉴 항목으로 이동하여 이 클라이언트를 볼 수 있습니다. 이 클라이언트는 영역을 관리하기 위해 부여할 수 있는 권한을 지정하는 클라이언트 수준 역할을 정의합니다.

  • view-realm
  • view-users
  • view-clients
  • view-events
  • manage-realm
  • manage-users
  • create-client
  • manage-clients
  • manage-events
  • view-identity-providers
  • manage-identity-providers
  • impersonation

사용자에게 원하는 역할을 할당하고 관리 콘솔의 특정 부분만 사용할 수 있습니다.

11.3. 미세 조정 관리자 권한

참고

미세한 관리자 권한은 기술 프리뷰 이며 완전히 지원되지 않습니다. 이 기능은 기본적으로 비활성화되어 있습니다.

-Dkeycloak.profile=preview 또는 -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled 를 사용하여 서버를 시작하려면 다음을 실행합니다. 자세한 내용은 프로필을 참조하십시오.

manage-realm 또는 manage-users 와 같은 역할이 너무 어울릴 수 있으며 더 미세한 조정 권한이 있는 제한된 관리 계정을 생성하려고 합니다. Red Hat Single Sign-On을 사용하면 영역 관리를 위한 제한된 액세스 정책을 정의하고 할당할 수 있습니다. 과 같은 것:

  • 특정 클라이언트 관리
  • 특정 그룹에 속한 사용자 관리
  • 그룹의 멤버십 관리
  • 제한된 사용자 관리
  • 알츠하이크 가장 제어
  • 사용자에게 특정 제한된 역할 집합을 할당할 수 있습니다.
  • 특정 제한된 역할 세트를 복합 역할에 할당할 수 있습니다.
  • 클라이언트의 범위에 특정 제한된 역할 집합을 할당할 수 있습니다.
  • 사용자, 그룹, 역할 및 클라이언트를 보고 관리하기 위한 새로운 일반 정책

고급 관리자 권한에 대해 유의해야 할 몇 가지 중요한 사항이 있습니다.

  • 권한 부여 서비스 상단에서 미세 조정 관리자 권한이 구현되었습니다. 세분화된 권한을 시작하기 전에 해당 기능을 읽는 것이 좋습니다.
  • 세분화된 권한은 해당 영역 내에서 정의된 전용 관리 콘솔 및 관리자 내에서만 사용할 수 있습니다. 교차 실질의 고급 권한을 정의 할 수 없습니다.
  • 세분화된 권한은 추가 권한을 부여하는 데 사용됩니다. 기본 제공 admin 역할의 기본 동작을 재정의할 수 없습니다.

11.3.1. 특정 클라이언트 관리

먼저 관리자가 하나의 클라이언트와 클라이언트 1개만 관리하도록 허용하는 방법을 살펴보겠습니다. 이 예제에서는 test 라는 영역과 sales-application 클라이언트가 있습니다. 영역 테스트에서 해당 애플리케이션만 관리할 수 있는 권한을 해당 영역에 사용자에게 부여합니다.

중요

영역의 미세한 권한은 교차할 수 없습니다. 마스터 영역의 관리자는 이전 장에서 정의한 사전 정의된 admin 역할로 제한됩니다.

11.3.1.1. 권한 설정

가장 먼저 수행해야 하는 작업은 해당 클라이언트에 대한 권한을 설정할 수 있도록 Admin Console에 로그인하는 것입니다. 클라이언트의 관리 섹션으로 이동하여 에 대한 세분화된 권한을 정의하려고 합니다.

클라이언트 관리

fine grain client

Permissions 라는 탭 메뉴 항목이 표시되어야 합니다. 해당 탭을 클릭합니다.

클라이언트 권한 탭

fine grain client permissions tab off

기본적으로 각 클라이언트는 미세 조정 권한을 수행할 수 없습니다. 따라서 권한 활성화를 on으로 전환하여 권한을 초기화합니다.

중요

Permissions Enabled 스위치를 끄면 이 클라이언트에 대해 정의한 모든 권한과 모든 권한이 삭제됩니다.

클라이언트 권한 탭

fine grain client permissions tab on

Permissions Enabled 를 on으로 전환할 때 Authorization Services 를 사용하여 백그라운드에서 다양한 권한 오브젝트를 초기화합니다. 이 예제에서는 클라이언트의 관리 권한에 관심이 있습니다. 이를 클릭하면 클라이언트의 관리 권한을 처리하는 권한으로 리디렉션됩니다. 모든 권한 부여 오브젝트는 realm-management 클라이언트의 권한 부여 탭에 포함됩니다.

클라이언트 관리 권한

fine grain client manage permissions

관리 권한을 처음 초기화하는 경우 연결된 정책이 없습니다. 정책 탭으로 이동하여 이를 생성해야 합니다. 속도를 높이려면 위 이미지에 표시된 권한 부여 링크를 클릭합니다. 그런 다음 정책 탭을 클릭합니다.

이 페이지에 정책 만들기 라는 풀다운 메뉴가 있습니다. 정의할 수 있는 다양한 정책이 있습니다. 역할 또는 그룹과 연결된 정책을 정의하거나 JavaScript에서 규칙을 정의할 수도 있습니다. 이 간단한 예제에서는 사용자 정책을 만들 것입니다.

사용자 정책

fine grain client user policy

이 정책은 사용자 데이터베이스의 하드 코딩된 사용자와 일치합니다. 이 경우 sales-admin 사용자입니다. 그런 다음 Sales -application 클라이언트의 관리 권한 페이지로 돌아가서 정책을 권한 오브젝트에 할당해야 합니다.

사용자 정책 할당

fine grain client assign user policy

sales-admin 사용자에게 Sales -application 클라이언트를 관리할 수 있는 권한이 있습니다.

한 가지 더 해야 할 일이 있습니다. Role Mappings 탭으로 이동하여 query-clients 역할을 sales-admin 에 할당합니다.

쿼리-클라이언트 할당

fine grain assign query clients

왜 이렇게 해야 합니까? 이 역할은 Sales -admin 이 Admin Console에 이동하면 Admin Console에 어떤 메뉴 항목을 렌더링해야 하는지 알려줍니다. query-clients 역할은 Admin Console에 sales-admin 사용자의 클라이언트 메뉴를 렌더링해야 함을 지시합니다.

query-clients 역할을 설정하지 않으면 sales-admin 과 같은 제한된 관리자가 Admin Console에 로그인할 때 메뉴 옵션을 볼 수 없습니다.

11.3.1.2. 테스트

다음으로 마스터 영역에서 로그아웃하고 sales- admin 을 사용자 이름으로 사용하여 테스트 영역의 전용 관리 콘솔에 다시 로그인합니다. /auth/admin/test/console 에 있습니다.

Sales admin login

fine grain sales admin login

이 관리자는 이제 하나의 클라이언트를 관리할 수 있습니다.

11.3.2. 사용자 역할 매핑 제한

사용자가 할 수 있는 또 다른 작업은 관리자가 사용자에게 할당할 수 있는 역할 세트를 제한하는 것입니다. 마지막 예제를 계속 진행하면 'sales-admin' 사용자의 권한 집합을 확장하여 이 애플리케이션에 액세스할 수 있는 사용자도 제어할 수 있습니다. 세분화된 권한을 통해 영업 관리자가 영업 애플리케이션에 대한 특정 액세스 권한을 부여하는 역할만 할당할 수 있도록 활성화할 수 있습니다. 또한 관리자가 역할만 매핑할 수 있도록 제한할 수 있으며 다른 유형의 사용자 관리는 수행할 수 없습니다.

Sales -application 세 가지 클라이언트 역할을 정의했습니다.

영업 애플리케이션 역할

fine grain sales application roles

sales-admin 사용자가 이러한 역할을 시스템의 모든 사용자에게 매핑해야 합니다. 이 작업을 수행하는 첫 번째 단계는 관리자가 역할을 매핑할 수 있도록 허용하는 것입니다. viewLeads 역할을 클릭하면 이 역할에 대한 권한 탭이 표시됩니다.

View leads role 권한 탭

fine grain view leads role tab

해당 탭을 클릭하고 사용 권한 활성화를 설정하면 정책을 적용할 수 있는 다양한 작업이 표시됩니다.

리더 권한 보기

fine grain view leads permissions

우리가 관심있는 것은 map-role 입니다. 이 권한을 클릭하고 이전 예제에서 만든 것과 동일한 User Policy를 추가합니다.

map-roles 권한

fine grain map roles permission

Red Hat은 영업 관리자가 viewLeads 역할을 매핑할 수 있다고 말합니다. 아직 수행하지 않은 것은 관리자가 이 역할을 매핑할 수 있는 사용자를 지정하는 것입니다. 이렇게 하려면 이 영역에 대해 관리 콘솔의 사용자 섹션으로 이동해야 합니다. Users left 메뉴 항목을 클릭하면 영역의 사용자 인터페이스로 이동합니다. 권한 탭이 표시되어야 합니다. 이를 클릭하고 활성화합니다.

사용자 권한

fine grain users permissions

관심 있는 권한은 map-roles 입니다. 이는 관리자가 역할을 사용자에게 매핑할 수 있는 기능만 허용한다는 점에서 제한적인 정책입니다. map-roles 권한을 클릭하고 이를 위해 만든 사용자 정책을 다시 추가하면 영업 관리자가 역할을 모든 사용자에게 매핑할 수 있습니다.

마지막으로 해야 할 것은 sales-adminview-users 역할을 추가하는 것입니다. 이를 통해 관리자는 Sales -application 역할을 추가하려는 영역의 사용자를 볼 수 있습니다.

view-users 추가

fine grain add view users

11.3.2.1. 테스트

다음으로 마스터 영역에서 로그아웃하고 sales- admin 을 사용자 이름으로 사용하여 테스트 영역의 전용 관리 콘솔에 다시 로그인합니다. /auth/admin/test/console 에 있습니다.

이제 sales-admin 이 시스템의 사용자를 볼 수 있음을 확인할 수 있습니다. 사용자 중 하나를 선택하면 Role Mappings 탭을 제외하고 각 사용자 세부 정보 페이지가 읽기 전용으로 표시됩니다. 이 탭으로 이동하면 영업 애플리케이션 역할을 검색할 때를 제외하고 관리자가 사용자에게 매핑할 수 있는 사용 가능한 역할이 없음을 확인할 수 있습니다.

보기 추가

fine grain add view leads

영업 관리자가 viewLeads 역할을 매핑 할 수 있도록만 지정했습니다.

11.3.2.2. 클라이언트 map-roles 바로 가기

영업 애플리케이션이 게시한 모든 클라이언트 역할에 대해 이를 수행해야 하는 경우 관리자가 클라이언트에서 정의한 모든 역할을 매핑할 수 있도록 지정하는 방법이 있습니다. 관리 콘솔에 마스터 영역 관리자에게 다시 로그인하고 sales-application 권한 페이지로 돌아가 map-roles 권한이 표시됩니다.

클라이언트 맵-roles 권한

fine grain client permissions tab on

관리자에게 이 특정 권한에 대한 액세스 권한을 부여하면 해당 관리자가 클라이언트에서 정의한 모든 역할을 매핑할 수 있습니다.

11.3.3. 전체 권한 목록

특정 클라이언트 또는 클라이언트의 특정 역할을 관리하는 것 이상의 미세한 권한을 통해 훨씬 더 많은 작업을 수행할 수 있습니다. 이 장에서는 영역에 대해 설명할 수 있는 전체 권한 유형 목록을 정의합니다.

11.3.3.1. Role

특정 역할의 권한 탭으로 이동하면 이러한 권한 유형이 나열됩니다.

map-role
관리자가 이 역할을 사용자에게 매핑할 수 있는지 결정하는 정책입니다. 이러한 정책은 관리자가 사용자 역할 매핑 작업을 수행할 수 없는 경우 역할을 사용자에게 매핑할 수 있도록만 지정합니다. 관리자는 관리 또는 역할 매핑 권한이 있어야 합니다. 자세한 내용은 사용자 권한 을 참조하십시오.
map-role-composite
관리자가 이 역할을 다른 역할에 매핑할 수 있는지 결정하는 정책입니다. 관리자는 해당 클라이언트에 대한 권한을 관리해야 하는 경우 클라이언트에 대한 역할을 정의할 수 있지만 컴포지션으로 추가하려는 역할에 대한 map-role-composite 권한이 없으면 해당 역할에 복합을 추가할 수 없습니다.
map-role-client-scope
관리자가 이 역할을 클라이언트 범위에 적용할 수 있는지 결정하는 정책입니다. 관리자가 클라이언트를 관리할 수 있는 경우에도 이 권한이 부여되지 않는 한 이 역할이 포함된 해당 클라이언트에 대한 토큰을 생성할 수 있는 권한이 없습니다.
11.3.3.2. 클라이언트

특정 클라이언트의 권한 탭으로 이동하면 이러한 권한 유형이 나열됩니다.

view
관리자가 클라이언트 구성을 볼 수 있는지 여부를 결정하는 정책입니다.
관리
관리자가 클라이언트 구성을 보고 관리할 수 있는지 결정하는 정책입니다. 이러한 권한에는 실수로 유출될 수 있는 몇 가지 문제가 있습니다. 예를 들어, admin은 관리자가 역할을 클라이언트의 범위에 매핑할 권한이 없는 경우에도 역할을 하드 코딩한 프로토콜 매퍼를 정의할 수 있습니다. 현재 이는 역할처럼 개별 권한을 할당할 방법이 없으므로 프로토콜 매퍼의 제한입니다.
configure
클라이언트를 관리하기 위한 권한 집합 감소. 이는 admin이 프로토콜 매퍼를 정의하거나 클라이언트 템플릿 또는 클라이언트의 범위를 변경할 수 없다는 점을 제외하고 manage 범위와 같습니다.
map-roles
관리자가 클라이언트에서 정의한 역할을 사용자에게 매핑할 수 있는지 여부를 결정하는 정책입니다. 이는 클라이언트에서 정의한 각 역할에 대한 정책을 정의하지 않도록 하는 바로 가기적이고 사용하기 쉬운 기능입니다.
map-roles-composite
관리자가 클라이언트에서 정의한 역할을 복합 역할로 매핑할 수 있는지 여부를 결정하는 정책입니다. 이는 클라이언트에서 정의한 각 역할에 대한 정책을 정의하지 않도록 하는 바로 가기적이고 사용하기 쉬운 기능입니다.
map-roles-client-scope
관리자가 클라이언트에서 정의한 역할을 다른 클라이언트의 범위에 매핑할 수 있는지 여부를 결정하는 정책입니다. 이는 클라이언트에서 정의한 각 역할에 대한 정책을 정의하지 않도록 하는 바로 가기적이고 사용하기 쉬운 기능입니다.
11.3.3.3. 사용자

모든 사용자의 권한 탭으로 이동하면 이러한 권한 유형이 나열됩니다.

view
관리자가 영역의 모든 사용자를 볼 수 있는지 여부를 결정하는 정책입니다.
관리
관리자가 영역의 모든 사용자를 관리할 수 있는지 여부를 결정하는 정책입니다. 이 권한은 관리자에게 사용자 역할 매핑을 수행할 수 있는 권한을 부여하지만 관리자가 매핑할 수 있는 역할을 지정하지는 않습니다. 관리자가 매핑할 수 있도록 하려면 각 역할에 대한 권한을 정의해야 합니다.
map-roles
이는 manage 범위에서 부여하는 권한의 하위 집합입니다. 이 경우 관리자는 역할을 매핑할 수만 있습니다. 관리자는 다른 사용자 관리 작업을 수행할 수 없습니다. 또한 manage 와 같이 admin이 적용할 수 있는 역할은 역할별로 또는 클라이언트 역할을 처리하는 경우 역할별로 지정해야 합니다.
manage-group-membership
map-roles 와 유사합니다. 단, 그룹 멤버십과 관련이 있음: 사용자를 추가하거나 제거할 수 있는 그룹입니다. 이러한 정책은 관리자가 멤버십을 관리할 수 있는 그룹이 아닌 그룹 멤버십을 관리할 수 있는 관리자 권한만 부여합니다. 각 그룹의 manage-members 권한에 대한 정책을 지정해야 합니다.
impersonate
관리자가 다른 사용자로 가장할 수 있는지 여부를 결정하는 정책입니다. 이러한 정책은 관리자의 속성 및 역할 매핑에 적용됩니다.
user-impersonated
가장할 수 있는 사용자를 결정하는 정책입니다. 이러한 정책은 가장하는 사용자에게 적용됩니다. 예를 들어, admin 권한이 있는 사용자를 가장하지 못하도록 금지할 정책을 정의하려고 할 수 있습니다.
11.3.3.4. 그룹

특정 그룹의 권한 탭으로 이동하면 이러한 권한 유형이 나열됩니다.

view
관리자가 그룹에 대한 정보를 볼 수 있는지 여부를 결정하는 정책입니다.
관리
관리자가 그룹 구성을 관리할 수 있는지 여부를 결정하는 정책입니다.
view-members
관리자가 그룹 멤버의 사용자 세부 정보를 볼 수 있는지 여부를 결정하는 정책입니다.
manage-members
관리자가 이 그룹에 속하는 사용자를 관리할 수 있는지 여부를 결정하는 정책입니다.
manage-membership
관리자가 그룹의 멤버십을 변경할 수 있는지 여부를 결정하는 정책입니다. 그룹에서 멤버를 추가하거나 제거합니다.

12장. OpenID Connect 및 SAML 클라이언트 관리

클라이언트는 사용자의 인증을 요청할 수 있는 엔티티입니다. 고객은 두 가지 형태로 나타납니다. 첫 번째 유형의 클라이언트는 SSO(Single-sign-on)에 참여하려는 애플리케이션입니다. 이러한 클라이언트는 Red Hat Single Sign-On에 보안 기능을 제공하기만 하면 됩니다. 다른 유형의 클라이언트는 인증된 사용자를 대신하여 다른 서비스를 호출할 수 있도록 액세스 토큰을 요청하는 클라이언트입니다. 이 섹션에서는 클라이언트 구성에 대한 다양한 측면과 이를 수행하는 다양한 방법에 대해 설명합니다.

12.1. OIDC 클라이언트

애플리케이션 보안을 위해 OpenID Connect 가 권장되는 프로토콜입니다. 처음부터 웹 친화적인 것으로 설계되었으며 HTML5/JavaScript 애플리케이션에서 가장 잘 작동합니다.

12.1.1. OpenID Connect 클라이언트 생성

OpenID connect 프로토콜을 사용하는 애플리케이션을 보호하려면 클라이언트를 생성합니다.

절차

  1. 메뉴에서 Clients 를 클릭합니다.
  2. 생성을 클릭하여 클라이언트 추가 페이지로 이동합니다.

    클라이언트 추가

    Add Client

  3. 클라이언트 ID 이름을 입력합니다.
  4. 클라이언트 프로토콜 드롭다운 상자에서 openid-connect 를 선택합니다.
  5. 루트 URL 필드에 애플리케이션의 기본 URL을 입력합니다.
  6. 저장을 클릭합니다.

이 작업은 클라이언트를 생성하고 설정 탭으로 이동합니다.

클라이언트 설정

Client Settings

추가 리소스

  • OIDC 프로토콜에 대한 자세한 내용은 OpenID Connect 를 참조하십시오.

12.1.2. 기본 설정

OIDC 클라이언트를 생성할 때 설정 탭에 다음 필드가 표시됩니다.

클라이언트 ID
OIDC 요청 및 Red Hat Single Sign-On 데이터베이스에서 사용되는 alpha-numeric ID 문자열입니다.
이름
Red Hat Single Sign-On UI 화면의 클라이언트 이름입니다. 이름을 지역화하려면 대체 문자열 값을 설정합니다. 예를 들어, ${myapp}와 같은 문자열 값입니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.
설명
클라이언트에 대한 설명입니다. 이 설정도 지역화될 수 있습니다.
enabled
해제되면 클라이언트가 인증을 요청할 수 없습니다.
동의 필요
켜지면 사용자는 해당 애플리케이션에 대한 액세스 권한을 부여하는 데 사용할 수 있는 동의 페이지를 볼 수 있습니다. 또한 사용자가 클라이언트가 액세스할 수 있는 정확한 정보를 알 수 있도록 메타데이터를 표시합니다.
액세스 유형
OIDC 클라이언트의 유형입니다.
confidential
브라우저 로그인을 수행하는 서버 측 클라이언트의 경우 액세스 토큰 요청을 수행할 때 클라이언트 시크릿이 필요합니다. 이 설정은 서버 측 애플리케이션에 사용해야 합니다.
public
브라우저 로그인을 수행하는 클라이언트 측 클라이언트의 경우 클라이언트 측 클라이언트에서 보안을 안전하게 유지할 수 없으므로 올바른 리디렉션 URI를 구성하여 액세스를 제한하는 것이 중요합니다.
bearer-only
애플리케이션은 전달자 토큰 요청만 허용합니다. 켜지면 이 애플리케이션은 브라우저 로그인에 참여할 수 없습니다.
표준 흐름 사용
활성화된 경우 클라이언트는 OIDC 인증 코드 흐름을 사용할 수 있습니다.
암시적 흐름 사용
활성화된 경우 클라이언트는 OIDC Implicit Flow 를 사용할 수 있습니다.
직접 액세스 권한 활성화
활성화되면 클라이언트는 OIDC Direct Access grants 를 사용할 수 있습니다.
OAuth 2.0 장치 인증 권한 부여 활성화
이 기능이 설정되어 있는 경우 클라이언트는 OIDC 장치 권한 부여 부여 부여 를 사용할 수 있습니다.
OpenID Connect 클라이언트 시작 백채널 인증 부여 활성화
이 기능이 켜져 있으면 클라이언트는 OIDC Client Initiated Backchannel Authentication Grant 를 사용할 수 있습니다.
루트 URL
Red Hat Single Sign-On에서 구성된 상대 URL을 사용하는 경우 이 값은 앞에 추가됩니다.
유효한 리디렉션 URI

필수 필드입니다. URL 패턴을 입력하고 + 를 클릭하여 추가하고 기존 URL을 제거하려면 저장 을 클릭합니다. 정확한 (대소문자 구분) 문자열 일치는 유효한 리디렉션 URI를 비교하는 데 사용됩니다.

URL 패턴의 끝에 와일드 카드를 사용할 수 있습니다. 예: http://host.com/path/*. 보안 문제를 방지하기 위해 전달된 리디렉션 URI에 userinfo 부분이 포함되어 있거나 경로가 상위 디렉터리(/../)에 대한 액세스를 관리하는 경우 와일드카드 비교가 수행되지 않지만 표준 및 보안 정확한 문자열 일치가 수행됩니다.

전체 와일드카드 * 유효한 리디렉션 URI는 http 또는 https 리디렉션 URI를 허용하도록 구성할 수도 있습니다. 프로덕션 환경에서는 사용하지 마십시오.

독점 리디렉션 URI 패턴은 일반적으로 더 안전합니다. 자세한 내용은 Un specific Redirect URIs 를 참조하십시오.

기본 URL
이 URL은 Red Hat Single Sign-On이 클라이언트에 연결해야 하는 경우에 사용됩니다.
관리자 URL
클라이언트의 콜백 끝점입니다. 서버는 이 URL을 사용하여 해지 정책 푸시, 백채널 로그아웃 수행 및 기타 관리 작업과 같은 콜백을 만듭니다. Red Hat Single Sign-On 서블릿 어댑터의 경우 이 URL은 서블릿 애플리케이션의 루트 URL일 수 있습니다. 자세한 내용은 보안 애플리케이션 및 서비스 가이드를 참조하십시오.

로고 URL

클라이언트 애플리케이션의 로고를 참조하는 URL입니다.

정책 URL

Relying Party Client가 프로필 데이터를 사용하는 방법에 대해 읽기 위해 최종 사용자에게 제공하는 URL입니다.

서비스 약관 URL

Relying Party Client가 Relying Party의 서비스 약관을 읽기 위해 최종 사용자에게 제공하는 URL입니다.

Web Origins

URL 패턴을 입력하고 + 를 클릭하여 기존 URL을 제거합니다. 저장을 클릭합니다.

이 옵션은 CORS(Cross-Origin Resource Sharing) 를 처리합니다. 브라우저 JavaScript가 JavaScript 코드와 다른 도메인이 다른 서버에 대한 HTTP 요청을 시도하는 경우 요청은 CORS를 사용해야 합니다. 서버가 CORS 요청을 처리해야 합니다. 그렇지 않으면 브라우저가 표시되지 않거나 요청을 처리할 수 없습니다. 이 프로토콜은 XSS, CSRF 및 기타 JavaScript 기반 공격으로부터 보호합니다.

여기에 나열된 도메인 URL은 클라이언트 애플리케이션으로 전송되는 액세스 토큰 내에 포함됩니다. 클라이언트 애플리케이션에서는 이 정보를 사용하여 CORS 요청이 호출될 수 있는지 여부를 결정합니다. Red Hat Single Sign-On 클라이언트 어댑터만 이 기능을 지원합니다. 자세한 내용은 애플리케이션 및 서비스 보안 가이드를 참조하십시오.

프론트 채널 로그아웃
CloudEvent Channel Logout 이 활성화된 경우 애플리케이션은 OpenID Connect IRQ-Channel Logout 사양에 따라 프런트 채널을 통해 사용자 로그아웃할 수 있어야 합니다. 활성화된 경우 CloudEvent -Channel Logout URL 도 제공해야 합니다.
front-Channel Logout URL
Red Hat Single Sign-On에서 프론트 채널을 통해 클라이언트에 로그 아웃 요청을 보내는 데 사용할 URL입니다.
Backchannel Logout URL
로그 아웃 요청이 이 영역으로 전송될 때 클라이언트가 (end_session_endpoint를 통해) 로그아웃하도록 하는 URL입니다. 생략하면 로그아웃 요청이 클라이언트에 전송되지 않습니다.

12.1.3. 고급 설정

고급 설정을 클릭하면 추가 필드가 표시됩니다.

OAuth 2.0 상호 TLS 인증서 Bound 액세스 토큰 활성화

참고

Red Hat Single Sign-On에서 상호 TLS를 활성화하려면 WildFly에서 상호 SSL 활성화를 참조하십시오.

상호 TLS는 TLS 핸드셰이크 중에 교환되는 액세스 토큰과 새로 고침 토큰을 클라이언트 인증서와 함께 바인딩합니다. 이 바인딩을 사용하면 공격자가 분할된 토큰을 사용할 수 없습니다.

이 유형의 토큰은 키 보유 토큰입니다. 전달자 토큰과 달리 보유자 토큰 수신자는 토큰 발신자가 적절한지 확인할 수 있습니다.

이 설정이 설정되어 있는 경우 워크플로우는 다음과 같습니다.

  1. 토큰 요청은 권한 부여 코드 흐름 또는 하이브리드 흐름에서 토큰 끝점으로 전송됩니다.
  2. Red Hat Single Sign-On은 클라이언트 인증서를 요청합니다.
  3. Red Hat Single Sign-On은 클라이언트 인증서를 받습니다.
  4. Red Hat Single Sign-On은 클라이언트 인증서를 성공적으로 확인합니다.

확인에 실패하면 Red Hat Single Sign-On에서 토큰을 거부합니다.

다음 경우 Red Hat Single Sign-On은 액세스 토큰 또는 새로 고침 토큰을 전송하는 클라이언트를 확인합니다.

  • 토큰 새로 고침 요청이 키 소유자 새로 고침 토큰을 사용하여 토큰 끝점으로 전송됩니다.
  • UserInfo 요청은 키 소유자 액세스 토큰을 사용하여 UserInfo 엔드포인트로 전송됩니다.A UserInfo request is sent to UserInfo endpoint with a holder-of-key access token.
  • 로그 아웃 요청은 키 소유자 새로 고침 토큰을 사용하여 Logout 끝점으로 전송됩니다.

자세한 내용은 OAuth 2.0 상호 TLS 클라이언트 인증 및 인증서 Bound 액세스 토큰 의 상호 TLS 클라이언트 인증서 Bound 액세스 토큰을 참조하십시오.

참고

현재 Red Hat Single Sign-On 클라이언트 어댑터는 키 보유자 토큰 확인을 지원하지 않습니다. Red Hat Single Sign-On 어댑터는 액세스 및 새로 고침 토큰을 전달자 토큰으로 처리합니다.

OIDC 고급 설정

OpenID Connect의 고급 설정을 사용하면 세션 및 토큰 시간 초과 에 대한 클라이언트 수준에서 재정의를 구성할 수 있습니다.

Advanced Settings

설정설명

액세스 토큰 수명

값은 동일한 이름으로 realm 옵션을 재정의합니다.

클라이언트 세션 ID

값은 동일한 이름으로 realm 옵션을 재정의합니다. 값은 글로벌 SSO 세션 ID보다 짧아야 합니다.

클라이언트 세션 최대

값은 동일한 이름으로 realm 옵션을 재정의합니다. 값은 글로벌 SSO 세션 최대값보다 짧아야 합니다.

클라이언트 오프라인 세션 ID

이 설정을 사용하면 클라이언트에 대해 더 짧은 오프라인 세션 유휴 시간 초과를 구성할 수 있습니다. Red Hat Single Sign-On이 오프라인 토큰을 취소하기 전에 세션이 유휴 상태로 유지되는 시간입니다. 설정하지 않으면 realm Offline Session Idle 이 사용됩니다.

클라이언트 오프라인 세션 최대

이 설정을 사용하면 클라이언트에 대해 더 짧은 오프라인 세션 max lifespan을 구성할 수 있습니다. 라이프 사이클은 Red Hat Single Sign-On이 해당 오프라인 토큰을 취소하기 전의 최대 시간입니다. 이 옵션에는 오프라인 세션 Max Limited 가 영역에 전역적으로 활성화되어 있어야 하며 기본값은 오프라인 세션 최대 입니다.

코드 교환 코드 챌린지 방법에 대한 검증 키

공격자가 적법한 클라이언트의 권한 부여 코드를 스틸링하는 경우 PKCE(Proof Key for Code Exchange)는 공격자가 코드에 적용되는 토큰을 수신하지 못하도록 합니다.

관리자는 다음 옵션 중 하나를 선택할 수 있습니다.

(blank)
Red Hat Single Sign-On은 클라이언트가 Red Hat Single Sign-On 인증 엔드포인트에 적절한 PKCE 매개변수를 보내지 않는 한 PKCE를 적용하지 않습니다.
S256
Red Hat Single Sign-On은 코드 챌린지 방법이 S256인 클라이언트에 적용됩니다.
plain
Red Hat Single Sign-On은 코드 챌린지 방법이 일반 클라이언트인 PKCE 클라이언트에 적용됩니다.

자세한 내용은 RFC 7636 Proof Key for Code Exchange by OAuth Public Clients 에서 참조하십시오.

서명 및 암호화된 ID 토큰 지원

Red Hat Single Sign-On은 Json Web Encryption(JWE) 사양에 따라 ID 토큰을 암호화할 수 있습니다. 관리자는 각 클라이언트에 대해 ID 토큰이 암호화되었는지 확인합니다.

ID 토큰을 암호화하는 데 사용되는 키는 콘텐츠 암호화 키(CEK)입니다. Red Hat Single Sign-On과 클라이언트는 사용 중인 ovirtK와 전달 방법을 협상해야 합니다. ovirtK를 결정하는 데 사용되는 방법은 키 관리 모드입니다. Red Hat Single Sign-On이 지원하는 키 관리 모드는 키 암호화입니다.

키 암호화에서 다음을 수행합니다.

  1. 클라이언트는 CloudEvent 암호화 키 쌍을 생성합니다.
  2. 공개 키는 ovirtK를 암호화하는 데 사용됩니다.
  3. Red Hat Single Sign-On은 ID 토큰당 thirdK를 생성합니다.
  4. Red Hat Single Sign-On은 생성된 ovirtK를 사용하여 ID 토큰을 암호화합니다.
  5. Red Hat Single Sign-On은 클라이언트의 공개 키를 사용하여 ovirtK를 암호화합니다.
  6. 클라이언트는 개인 키를 사용하여 이 암호화된 ovirtK의 암호를 해독합니다.
  7. 클라이언트는 암호가 해독된 ovirtK를 사용하여 ID 토큰을 해독합니다.

클라이언트 이외의 당사자는 ID 토큰을 해독할 수 없습니다.

클라이언트는 ovirtK를 Red Hat Single Sign-On에 암호화하기 위해 공개 키를 전달해야 합니다. Red Hat Single Sign-On은 클라이언트가 제공하는 URL에서 공개 키를 다운로드할 수 있도록 지원합니다. 클라이언트는 Json Web Keys (JWK) 사양에 따라 공개 키를 제공해야 합니다.

절차는 다음과 같습니다.

  1. 클라이언트의 탭을 엽니다.
  2. JWKS URL 을 ON으로 전환합니다.
  3. JWKS URL 텍스트 상자에 클라이언트의 공개 키 URL을 입력합니다.

키 암호화 알고리즘은 Json Web Algorithm(JWA) 사양에 정의되어 있습니다. Red Hat Single Sign-On은 다음을 지원합니다.

  • RSAES-PKCS1-v1_5(RSA1_5)
  • RSAES OAEP 기본 매개변수를 사용하는 RSAES OAEP(RSA-OAEP)
  • RSAES OAEP 256에서 SHA-256 및 MFG1 사용 (RSA-OAEP-256)

알고리즘을 선택하는 절차는 다음과 같습니다.

  1. 클라이언트의 설정 탭을 엽니다.
  2. Open Fine grain OpenID Connect Configuration.
  3. ID 토큰 암호화 콘텐츠 암호화 알고리즘 풀다운 메뉴에서 알고리즘 을 선택합니다.

ACR to Level of Authentication (LoA) Mapping

클라이언트의 고급 설정에서 ACR(Authentication Context Class Reference) 값을 정의할 수 있습니다. 이 값은 LoA(Level of Authentication) 에 매핑됩니다. 이 매핑은 ACR에 언급된 LOA Mapping 영역에서도 지정할 수 있습니다. 가장 좋은 방법은 여러 클라이언트 간에 동일한 설정을 공유할 수 있는 영역 수준에서 이 매핑을 구성하는 것입니다.

Default ACR 값은 로그인 요청이 acr_values 매개변수 없이 Red Hat Single Sign-On으로 전송될 때 기본값을 지정하고 acr 클레임이 연결된 클레임 매개변수 없이 기본값을 지정할 수 있습니다. 외부 OIDC 동적 클라이언트 등록 사양을 참조하십시오.

주의

기본 ACR 값은 기본값으로 사용되지만 특정 수준으로 로그인을 적용하는 데 안정적으로 사용할 수 없습니다. 예를 들어 기본 ACR 값을 수준 2로 구성한다고 가정합니다. 그러면 기본적으로 사용자는 수준 2로 인증해야 합니다. 그러나 사용자가 매개 변수를 acr_values=1 과 같은 로그인 요청에 명시적으로 연결하면 수준 1이 사용됩니다. 결과적으로 클라이언트가 실제로 레벨 2를 요구하는 경우 클라이언트는 ID 토큰 내에 acr 클레임이 있는지 확인하고 요청된 수준 2가 포함되어 있는지 확인하는 것이 좋습니다.

ACR to LoA mapping

자세한 내용은 단계별 인증offical OIDC 사양을 참조하십시오.

12.1.4. 기밀 클라이언트 자격 증명

클라이언트의 액세스 유형이 기밀 로 설정된 경우 클라이언트의 자격 증명은 Credentials 탭에서 구성해야 합니다.

인증 정보 탭

Credentials Tab

Client Authenticator 드롭다운 목록은 클라이언트에 사용할 인증 정보 유형을 지정합니다.

클라이언트 ID 및 시크릿

이 옵션은 기본 설정입니다. 시크릿은 자동으로 생성되며 Regenerate 시크릿을 클릭하면 필요한 경우 시크릿이 다시 생성됩니다.

서명된 JWT

client credentials jwt

서명된 JWT 는 "Signed Json Web Token"입니다.

이 인증 정보 유형을 선택할 때 키 탭에서 클라이언트의 개인 키 및 인증서를 생성해야 합니다. 개인 키는 JWT에 서명하는 데 사용되며 인증서는 서버에서 서명을 확인하는 데 사용됩니다.

키 탭

client oidc keys

새 키와 인증서 생성 버튼을 클릭하여 이 프로세스를 시작합니다.

키 생성

generate client keys

  1. 사용할 아카이브 형식을 선택합니다.
  2. 키 암호 를 입력합니다.
  3. 저장소 암호 를 입력합니다.
  4. 생성 및 다운로드를 클릭합니다.

키를 생성할 때 Red Hat Single Sign-On은 인증서를 저장하고 클라이언트의 개인 키와 인증서를 다운로드합니다.

외부 도구를 사용하여 키를 생성한 다음 인증서 가져오기를 클릭하여 클라이언트 인증서를 가져올 수도 있습니다.

인증서 가져오기

Import Certificate

  1. 인증서의 아카이브 형식을 선택합니다.
  2. 저장소 암호를 입력합니다.
  3. 파일 가져오기 를 클릭하여 인증서 파일을 선택합니다.
  4. Import 를 클릭합니다.

JWKS URL 사용을 클릭하면 인증서 가져오기가 필요하지 않습니다. 이 경우 공개 키가 JWK 형식으로 게시되는 URL을 제공할 수 있습니다. 이 옵션을 사용하면 키가 변경되면 Red Hat Single Sign-On에서 키를 다시 가져옵니다.

Red Hat Single Sign-On 어댑터에서 보호하는 클라이언트를 사용하는 경우 https://myhost.com/myapp 가 클라이언트 애플리케이션의 루트 URL이라고 가정하면 이 형식으로 JWKS URL을 구성할 수 있습니다.

https://myhost.com/myapp/k_jwks

자세한 내용은 서버 개발자 가이드를 참조하십시오.

주의

Red Hat Single Sign-On은 OIDC 클라이언트의 공개 키를 캐시합니다. 클라이언트의 개인 키가 손상되면 키를 업데이트하고 키 캐시를 지웁니다. 자세한 내용은 캐시 섹션 삭제를 참조하십시오.

클라이언트 시크릿을 사용하여 서명된 JWT

이 옵션을 선택하는 경우 개인 키 대신 클라이언트 시크릿에서 서명한 JWT를 사용할 수 있습니다.

클라이언트 시크릿은 클라이언트에서 JWT에 서명하는 데 사용됩니다.

X509 인증서

Red Hat Single Sign-On은 TLS 핸드셰이크 중에 클라이언트가 적절한 X509 인증서를 사용하는지 확인합니다.

참고

이 옵션에는 Red Hat Single Sign-On의 상호 TLS가 필요합니다. WildFly에서 상호 SSL 활성화를 참조하십시오.

X509 인증서

x509 client auth

유효성 검사기에서는 regexp 검증 표현식이 구성된 인증서의 Subject DN 필드도 확인합니다. 일부 사용 사례의 경우 모든 인증서를 수락하는 것으로 충분합니다. 이 경우 (.*?)(?:$) 표현식을 사용할 수 있습니다.

Red Hat Single Sign-On은 요청에서 클라이언트 ID를 가져오는 두 가지 방법이 있습니다.

  • 쿼리의 client_id 매개 변수( OAuth 2.0 사양의 2.2 섹션에 설명되어 있음).
  • client_id 를 양식 매개 변수로 제공합니다.

12.1.5. 클라이언트 시크릿 순환

참고

클라이언트 시크릿 Rotation은 기술 프리뷰 이며 완전히 지원되지 않습니다. 이 기능은 기본적으로 비활성화되어 있습니다.

-Dkeycloak.profile=preview 또는 -Dkeycloak.profile.feature.client_secret_rotation=enabled 로 서버를 시작하려면 다음을 실행합니다. 자세한 내용은 프로필을 참조하십시오.

기밀성 액세스 유형이 있는 클라이언트 경우 Red Hat Single Sign-On은 클라이언트 정책을 통해 클라이언트 순환 보안 기능을 지원합니다.

클라이언트 보안 교체 정책은 보안 누출과 같은 문제를 완화하기 위해 보안을 강화합니다. 활성화되면 Red Hat Single Sign-On은 각 클라이언트에 대해 최대 두 개의 동시에 활성 시크릿을 지원합니다. 정책은 다음 설정에 따라 회전을 관리합니다.

  • secret expiration: [seconds] - 시크릿이 순환될 때 새 시크릿의 기간이 만료됩니다. 보안 생성 날짜에 추가된 양( )입니다. 정책 실행 시 계산됩니다.
  • 순환된 시크릿 expiration: [seconds] - 시크릿이 순환되면 이 값은 이전 시크릿의 나머지 만료 시간입니다. 이 값은 항상 보안 만료보다 작아야 합니다. 값이 0이면 클라이언트 순환 중에 이전 보안이 즉시 제거됩니다. 시크릿 회전 날짜에 추가된 양( )입니다. 정책 실행 시 계산됩니다.
  • 업데이트 중 순환 남은 시간: [초] - 동적 클라이언트 업데이트로 클라이언트 시크릿 교체를 수행해야 하는 시간입니다. 정책 실행 시 계산됩니다.

클라이언트 시크릿이 순환되면 새 기본 보안이 생성되고 이전 클라이언트 기본 시크릿이 새 만료 날짜가 포함된 보조 시크릿이 됩니다.

12.1.5.1. 클라이언트 시크릿 순환 규칙

순환은 자동으로 또는 백그라운드 프로세스를 통해 발생하지 않습니다. 순환을 수행하려면 클라이언트의 자격 증명 탭 또는 Admin REST API에서 Regenerate Secret 기능을 통해 Red Hat Single Sign-On 관리 콘솔을 통해 클라이언트에서 업데이트 작업이 필요합니다. 클라이언트 업데이트 작업을 호출할 때 규칙에 따라 시크릿 순환이 수행됩니다.

  • Secret expiration 값이 현재 날짜보다 작으면 경우입니다.
  • 동적 클라이언트 등록 클라이언트 업데이트 요청 중에 업데이트 중 남은 만료 시간이 현재 날짜와 시크릿 만료 기간 사이의 기간과 일치하면 클라이언트 시크릿이 자동으로 순환됩니다.

또한 Admin REST API를 통해 언제든지 클라이언트 시크릿 순환을 강제 적용할 수 있습니다.

참고

새 클라이언트를 생성하는 동안 클라이언트 시크릿 교체 정책이 활성화된 경우 해당 동작이 자동으로 적용됩니다.

주의

기존 클라이언트에 시크릿 교체 동작을 적용하려면 정책을 정의한 후 해당 클라이언트를 업데이트하여 동작이 적용되도록 합니다.

12.1.6. OIDC 클라이언트 시크릿 순환 정책 생성

다음은 시크릿 교체 정책을 정의하는 예입니다.

절차

  1. 왼쪽 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 클라이언트 정책 탭을 클릭합니다.
  3. 프로필 페이지에서 만들기를 클릭합니다.

    프로필 생성

    Create Client Profile

  4. Name( 이름 )의 이름을 입력합니다.
  5. Description 에 대한 프로필의 목적을 식별하는 데 도움이 되는 설명을 입력합니다.
  6. 저장을 클릭합니다.

    이 작업은 프로필을 생성하고 executors를 구성할 수 있습니다.

  7. 만들기를 클릭하여 이 프로필에 대한 실행자를 구성합니다.

    프로필 executors 만들기

    Client Profile Executor

  8. Executor type으로 secret-rotation 을 선택합니다.
  9. 시크릿 만료 에 각 시크릿의 최대 기간(초)을 입력합니다.
  10. Rotated Secret Expiration 에 각 순환된 시크릿의 최대 기간(초)을 입력합니다.

    주의

    Rotated Secret Expiration 값은 항상 Secret Expiration 보다 작아야 합니다.

  11. 시간을 입력합니다(초) 후 업데이트 작업이 Remain Expiration Time 에 대해 클라이언트를 업데이트합니다.
  12. 저장을 클릭합니다.

    참고

    위의 예에서는 다음을 수행합니다.

    • 각 시크릿은 1 주 동안 유효합니다.
    • 순환된 보안은 2일 후에 만료됩니다.
    • 동적 클라이언트 업데이트를 위한 창은 시크릿이 만료되기 1일 전에 시작됩니다.
  13. 클라이언트 정책 탭으로 돌아갑니다.
  14. 정책을 클릭합니다.
  15. 생성을 클릭합니다.

    클라이언트 시크릿 순환 정책 생성

    Client Rotation Policy

  16. Name( 이름 )의 이름을 입력합니다.
  17. 설명 정책의 목적을 식별하는 데 도움이 되는 설명을 입력합니다.
  18. 저장을 클릭합니다.

    이 작업은 정책을 생성하고 정책과 프로필을 연결할 수 있습니다. 또한 정책 실행에 대한 조건을 구성할 수 있습니다.

  19. Conditions에서 Create 를 클릭합니다.

    클라이언트 시크릿 순환 정책 상태 생성

    Client Rotation Policy Condition

  20. 모든 기밀 클라이언트에 해당 동작을 적용하려면 Condition Type 필드에서 client-access-type 을 선택합니다.

    참고

    특정 클라이언트 그룹에 적용하려면 Condition Type 필드에서 client-roles 유형을 선택하는 것입니다. 이렇게 하면 특정 역할을 생성하고 각 역할에 사용자 지정 교체 구성을 할당할 수 있습니다.

  21. 클라이언트 액세스 유형 필드에 기밀 을 추가합니다.
  22. 저장을 클릭합니다.
  23. 정책 설정으로 돌아와 클라이언트 프로필 추가 선택 메뉴에서 이전에 생성된 Weekly Client Secret Rotation Profile 을 선택합니다.

클라이언트 시크릿 순환 정책

Client Rotation Policy

참고

기존 클라이언트에 시크릿 교체 동작을 적용하려면 다음 단계를 따르십시오.

관리자 콘솔 사용

  1. 일부 고객으로 가십시오.
  2. Tab 자격 증명 으로 이동합니다.
  3. Re-generate secret 을 클릭합니다.

클라이언트 REST 서비스를 사용하면 다음 두 가지 방법으로 실행할 수 있습니다.

  • 클라이언트에서 업데이트 작업을 통해
  • 재생성된 클라이언트 시크릿 끝점 사용

12.1.7. 서비스 계정 사용

각 OIDC 클라이언트에는 기본 제공 서비스 계정이 있습니다. 이 서비스 계정을 사용하여 액세스 토큰을 가져옵니다.

절차

  1. 메뉴에서 Clients 를 클릭합니다.
  2. 클라이언트를 선택합니다.
  3. 설정 탭을 클릭합니다.
  4. 클라이언트의 액세스 유형을 기밀 로 설정합니다.
  5. 서비스 계정 활성화를 ON 으로 전환합니다.
  6. 저장을 클릭합니다.
  7. 클라이언트 자격 증명을 구성하십시오.
  8. 범위 탭을 클릭합니다.
  9. 역할이 있거나 허용된 전체 범위를 ON 으로 전환했는지 확인합니다.
  10. 서비스 계정 역할 탭을 클릭합니다.
  11. 클라이언트에 대해 이 서비스 계정에 사용 가능한 역할을 구성합니다.

액세스 토큰의 역할은 다음과 같은 교집합입니다.

  • 연결된 클라이언트 범위에서 상속된 역할 범위 매핑과 결합된 클라이언트의 역할 범위 매핑입니다.
  • 서비스 계정 역할.

호출할 REST URL은 /auth/realms/{realm-name}/protocol/openid-connect/token 입니다. 이 URL은 POST 요청으로 호출되어야 하며 요청을 사용하여 클라이언트 자격 증명을 게시해야 합니다.

기본적으로 클라이언트 인증 정보는 Authorization: Basic 헤더에서 클라이언트의 clientId 및 clientSecret으로 표시되지만 서명된 JWT 어설션 또는 클라이언트 인증을 위한 기타 사용자 정의 메커니즘으로 클라이언트를 인증할 수도 있습니다.

또한 OAuth2 사양에 따라 grant_type 매개변수를 "client_credentials"로 설정해야 합니다.

예를 들어 서비스 계정을 검색하는 POST 호출은 다음과 같습니다.

    POST /auth/realms/demo/protocol/openid-connect/token
    Authorization: Basic cHJvZHVjdC1zYS1jbGllbnQ6cGFzc3dvcmQ=
    Content-Type: application/x-www-form-urlencoded

    grant_type=client_credentials

응답은 OAuth 2.0 사양의 액세스 토큰 응답 과 유사합니다.

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"bearer",
    "expires_in":60
}

기본적으로 액세스 토큰만 반환됩니다. 새로 고침 토큰이 반환되지 않으며 기본적으로 인증에 성공하면 Red Hat Single Sign-On 측에서 사용자 세션이 생성되지 않습니다. 새로 고침 토큰이 없기 때문에 액세스 토큰이 만료되면 다시 인증해야 합니다. 그러나 이러한 상황은 세션이 기본적으로 생성되지 않기 때문에 Red Hat Single Sign-On 서버에 대한 추가 오버헤드를 나타내는 것은 아닙니다.

이 경우 로그아웃이 필요하지 않습니다. 하지만 OpenID Connect Endpoints 섹션에 설명된 대로 OAuth2 Revocation Endpoints에 요청을 전송하면 발행된 액세스 토큰을 취소할 수 있습니다.

추가 리소스

자세한 내용은 클라이언트 자격 증명 부여 를 참조하십시오.

12.1.8. 대상 고객 지원

일반적으로 Red Hat Single Sign-On이 배포된 환경은 인증을 위해 Red Hat Single Sign-On을 사용하는 기밀 또는 공용 클라이언트 애플리케이션 세트로 구성됩니다.

클라이언트 애플리케이션의 요청을 제공하고 이러한 애플리케이션에 리소스를 제공하는 서비스 ( OAuth 2 사양의 리소스서버 )도 사용할 수 있습니다. 이러한 서비스에는 요청을 인증하기 위해 액세스 토큰 (Bearer 토큰)이 전송되어야 합니다. 이 토큰은 Red Hat Single Sign-On에 로그인하면 프런트 엔드 애플리케이션에서 가져옵니다.

서비스 간 신뢰가 낮은 환경에서는 다음 시나리오가 발생할 수 있습니다.

  1. 프런트 엔드 클라이언트 애플리케이션에는 Red Hat Single Sign-On에 대한 인증이 필요합니다.
  2. Red Hat Single Sign-On은 사용자를 인증합니다.
  3. Red Hat Single Sign-On은 애플리케이션에 대한 토큰을 발행합니다.
  4. 애플리케이션은 토큰을 사용하여 신뢰할 수 없는 서비스를 호출합니다.
  5. 신뢰할 수 없는 서비스는 애플리케이션에 대한 응답을 반환합니다. 그러나 애플리케이션 토큰을 유지합니다.
  6. 그런 다음 신뢰할 수 없는 서비스는 applications 토큰을 사용하여 신뢰할 수 있는 서비스를 호출합니다. 이로 인해 신뢰할 수 없는 서비스로 인해 보안이 손상되어 클라이언트 애플리케이션을 대신하여 다른 서비스에 액세스하도록 토큰이 오용됩니다.

이 시나리오는 서비스 간에 높은 수준의 신뢰가 있는 환경에서는 가능성이 크지 않지만 신뢰가 낮은 환경에서는 그렇지 않습니다. 일부 환경에서는 신뢰할 수 없는 서비스에서 원래 클라이언트 애플리케이션으로 데이터를 반환하기 위해 신뢰할 수 없는 서비스에서 데이터를 검색해야 할 수 있으므로 이 워크플로가 정확할 수 있습니다.

무제한 오디언스는 서비스 간에 높은 수준의 신뢰가 존재하는 경우 유용합니다. 그렇지 않으면 사용자가 제한해야 합니다. 대상을 제한하고 동시에 신뢰할 수 없는 서비스에서 신뢰할 수 있는 서비스에서 데이터를 검색할 수 있습니다. 이 경우 신뢰할 수 없는 서비스와 신뢰할 수 있는 서비스가 토큰에 오디언스로 추가되었는지 확인합니다.

액세스 토큰을 오용하지 않도록 하려면 토큰에서 오디언스를 제한하고, 토큰의 오디언스를 확인하도록 서비스를 구성합니다. 흐름은 다음과 같이 변경됩니다.

  1. 프런트 엔드 애플리케이션은 Red Hat Single Sign-On에 대해 인증됩니다.
  2. Red Hat Single Sign-On은 사용자를 인증합니다.
  3. Red Hat Single Sign-On은 애플리케이션에 대한 토큰을 발행합니다. 애플리케이션은 신뢰할 수 없는 서비스를 호출해야 함을 알고 있으므로 Red Hat Single Sign-On으로 전송된 인증 요청에 scope=<untrusted service >를 배치합니다( 범위 매개 변수에 대한 자세한 내용은 클라이언트 범위 섹션 참조).

    애플리케이션에 발행된 토큰에는 클라이언트가 이 액세스 토큰을 사용하여 신뢰할 수 없는 서비스를 호출하도록 선언하는 신뢰할 수 없는 서비스에 대한 참조(오디오": [ "<untrusted service>" ])가 포함되어 있습니다.

  4. 신뢰할 수 없는 서비스는 토큰을 사용하여 신뢰할 수 있는 서비스를 호출합니다. 신뢰할 수 있는 서비스가 토큰에서 오디언스를 확인하고 신뢰할 수 없는 서비스에 대해서만 해당 대상을 찾으므로 호출에 성공하지 못했습니다. 이 동작은 예상되며 보안이 손상되지 않습니다.

클라이언트가 나중에 신뢰할 수 있는 서비스를 호출하려는 경우 범위=<trusted service>로 SSO 로그인을 다시 발행하여 다른 토큰을 가져와야 합니다. 그런 다음 반환된 토큰은 신뢰할 수 있는 서비스를 대상자로 포함합니다.

"audience": [ "<trusted service>" ]

이 값을 사용하여 < 신뢰할 수 있는 서비스& gt;를 호출합니다.

12.1.8.1. 설정

대상 항목 확인을 설정할 때:

  • 어댑터 구성에 verify-token-audience 플래그를 추가하여 서비스가 전송된 액세스 토큰에서 대상을 확인하도록 구성되어 있는지 확인합니다. 자세한 내용은 어댑터 구성을 참조하십시오.
  • Red Hat Single Sign-On에서 발행한 액세스 토큰에 필요한 모든 대상이 포함되어 있는지 확인합니다. 다음 섹션에 설명된 대로 클라이언트 역할을 사용하여 대상을 추가하거나 하드 코딩할 수 있습니다. 하드 코딩된 대상 을 참조하십시오.
12.1.8.2. 대상 자동 추가

iPXE Resolve 프로토콜 매퍼는 기본 클라이언트 범위 역할에 정의되어 있습니다. 매퍼는 현재 토큰에 사용 가능한 클라이언트 역할이 하나 이상 있는 클라이언트를 확인합니다. 그런 다음 각 클라이언트의 클라이언트 ID가 대상자로 추가되며, 이는 서비스(일반적으로 베어러 전용) 클라이언트가 클라이언트 역할에 의존하는 경우 유용합니다.

예를 들어 전달자 전용 클라이언트 및 기밀 클라이언트의 경우 기밀 클라이언트에 대해 발행된 액세스 토큰을 사용하여 전달자 전용 클라이언트 REST 서비스를 호출할 수 있습니다. 전달자 전용 클라이언트는 다음에 해당하는 경우 기밀 클라이언트에 대해 발행된 액세스 토큰의 대상자로 자동으로 추가됩니다.

  • 전달자 전용 클라이언트에는 자체적으로 정의된 모든 클라이언트 역할이 있습니다.
  • 대상 사용자에게 해당 클라이언트 역할 중 하나 이상이 할당되어 있습니다.
  • 기밀 클라이언트에는 할당된 역할에 대한 역할 범위 매핑이 있습니다.
참고

대상을 자동으로 추가하지 않도록 하려면 기밀 클라이언트에 직접 역할 범위 매핑을 구성하지 마십시오. 대신 전용 클라이언트 범위의 클라이언트 역할에 대한 역할 범위 매핑이 포함된 전용 클라이언트 범위를 생성할 수 있습니다.

클라이언트 범위가 보안 클라이언트에 선택적 클라이언트 범위로 추가된다고 가정하면, scope=< trusted service > 매개변수에서 명시적으로 요청하는 경우 클라이언트 역할과 대상자가 토큰에 추가됩니다.

참고

프런트 엔드 클라이언트 자체는 액세스 토큰 대상에 자동으로 추가되지 않으므로 액세스 토큰과 ID 토큰을 쉽게 구분할 수 있습니다. 액세스 토큰에는 토큰이 발급되는 클라이언트가 포함되어 있지 않기 때문입니다.

클라이언트가 대상자로 필요한 경우 하드 코딩된 대상 옵션을 참조하십시오. 그러나 frontend 및 REST 서비스 둘 다와 동일한 클라이언트를 사용하는 것은 권장되지 않습니다.

12.1.8.3. 하드 코딩된 대상

서비스가 영역 역할에 의존하거나 토큰의 역할을 전혀 사용하지 않는 경우 하드 코딩된 대상을 사용하는 것이 유용할 수 있습니다. 하드 코딩된 대상은 지정된 서비스 클라이언트의 클라이언트 ID를 토큰 대상자로 추가할 프로토콜 매퍼입니다. 클라이언트 ID와 다른 대상을 사용하려는 경우 URL과 같은 사용자 지정 값을 사용할 수 있습니다.

frontend 클라이언트에 프로토콜 매퍼를 직접 추가할 수 있습니다. 프로토콜 매퍼가 직접 추가되면 항상 대상도 추가됩니다.

프로토콜 매퍼를 더 제어하기 위해 전용 클라이언트 범위에서 프로토콜 매퍼를 생성할 수 있습니다(예: good-service ).

대상 프로토콜 매퍼

audience mapper

  • good-service 클라이언트의 설치 탭에서 어댑터 구성을 생성할 수 있으며 verify-token-audience 옵션이 true 로 설정되어 있는지 확인할 수 있습니다. 이렇게 하면 어댑터가 이 설정을 사용하는 경우 대상을 확인할 수 있습니다.
  • 기밀 클라이언트가 토큰의 오디언스로서 좋은 서비스를 요청할 수 있는지 확인해야 합니다.

    기밀 고객:

    1. 클라이언트 범위 탭을 클릭합니다.
    2. 선택 사항(또는 기본) 클라이언트 범위로 good-service 를 할당합니다.

      자세한 내용은 클라이언트 범위 연결 섹션 을 참조하십시오.

  • 선택적으로 클라이언트 범위를 평가하고 액세스 토큰 예제를 생성할 수 있습니다. good-service 가 선택적 클라이언트 범위로 할당될 때 scope 매개 변수에 포함된 경우 생성된 액세스 토큰의 오디언에 추가됩니다.
  • 기밀 클라이언트 애플리케이션에서 scope 매개 변수가 사용되는지 확인합니다. good-service 에 액세스하기 위해 토큰을 발행하려면 good-service 값을 포함해야 합니다.

    다음 내용을 참조하십시오.

참고

10.0.0.1 ECDHE Resolve 프로토콜 매퍼는 기본적으로 액세스 토큰에만 대상을 추가합니다. ID 토큰에는 일반적으로 단일 대상자, 토큰이 발행된 클라이언트 ID, OpenID Connect 사양의 요구 사항만 포함됩니다. 그러나 오디언스 매퍼가 추가되지 않는 한 액세스 토큰에 클라이언트 ID가 있어야 합니다.

12.2. SAML 클라이언트 생성

Red Hat Single Sign-On은 등록된 애플리케이션에 SAML 2.0 을 지원합니다. POST 및 리디렉션 바인딩이 지원됩니다. 클라이언트 서명 유효성 검사가 필요하도록 선택할 수 있습니다. 서버 서명 및/또는 응답을 암호화할 수도 있습니다.

절차

  1. 메뉴에서 Clients 를 클릭합니다.
  2. 생성을 클릭하여 클라이언트 추가 페이지로 이동합니다.

    클라이언트 추가

    add client saml

  3. 클라이언트의 클라이언트 ID 를 입력합니다. 이는 종종 URL이며 애플리케이션에서 보낸 SAML 요청에서 예상되는 발급자 값입니다.
  4. 클라이언트 프로토콜 드롭다운 상자에서 saml 를 선택합니다.
  5. Client SAML Endpoint URL을 입력합니다. 이 URL은 Red Hat Single Sign-On 서버에서 SAML 요청 및 응답을 보낼 수 있도록 하려는 URL입니다. 일반적으로 애플리케이션에는 SAML 요청을 처리하는 데 필요한 하나의 URL이 있습니다. 클라이언트의 설정 탭에서 여러 URL을 설정할 수 있습니다.
  6. 저장을 클릭합니다. 이 작업은 클라이언트를 생성하고 설정 탭으로 이동합니다.

    클라이언트 설정

    client settings saml

    다음 목록에서는 각 설정에 대해 설명합니다.

    클라이언트 ID
    OIDC 요청 및 Red Hat Single Sign-On 데이터베이스에서 사용되는 alpha-numeric ID 문자열입니다. 이 값은 AuthNRequests로 전송된 발행자 값과 일치해야 합니다. Red Hat Single Sign-On은 Authn SAML 요청에서 발행자를 가져와서 이 값으로 클라이언트에 연결합니다.
    이름
    Red Hat Single Sign-On UI 화면에서 클라이언트의 이름입니다. 이름을 지역화하려면 대체 문자열 값을 설정합니다. 예를 들어, ${myapp}와 같은 문자열 값입니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.
    설명
    클라이언트에 대한 설명입니다. 이 설정도 지역화될 수 있습니다.
    enabled
    OFF로 설정하면 클라이언트가 인증을 요청할 수 없습니다.
    동의 필요
    ON으로 설정하면 사용자는 해당 애플리케이션에 대한 액세스 권한을 부여하는 동의 페이지가 표시됩니다. 페이지에는 클라이언트가 액세스할 수 있는 정보의 메타데이터도 표시됩니다. Facebook에 대한 소셜 로그인을 수행한 적이 있는 경우 종종 유사한 페이지를 볼 수 있습니다. Red Hat Single Sign-On은 동일한 기능을 제공합니다.
    AuthnStatement 포함
    SAML 로그인 응답은 암호 및 로그인의 타임스탬프 및 세션 만료와 같은 인증 방법을 지정할 수 있습니다. AuthnStatement 를 기본적으로 사용하도록 설정하여 AuthnStatement 요소가 로그인 응답에 포함됩니다. 이 값을 OFF로 설정하면 클라이언트가 만료되지 않는 클라이언트 세션을 만들 수 있는 최대 세션 길이를 확인할 수 없습니다.
    부호 문서
    ON으로 설정하면 Red Hat Single Sign-On은 영역 개인 키를 사용하여 문서에 서명합니다.
    REDIRECT 서명 키 조회 최적화

    ON으로 설정하면 SAML 프로토콜 메시지에 Red Hat Single Sign-On 기본 확장 기능이 포함됩니다. 이 확장에는 서명 키 ID가 있는 힌트가 포함되어 있습니다. SP는 키를 사용하여 서명을 검증하는 대신 서명 유효성 검사를 위해 확장 기능을 사용합니다.

    이 옵션은 서명이 쿼리 매개변수에서 전송되고 이 정보가 서명 정보에 없는 REDIRECT 바인딩에 적용됩니다. 키 ID가 항상 문서 서명에 포함된 POST 바인딩 메시지와는 충돌합니다.

    이 옵션은 Red Hat Single Sign-On 서버 및 어댑터에서 IDP 및 SP를 제공할 때 사용됩니다. 이 옵션은 Sign Documents 가 ON으로 설정된 경우에만 관련이 있습니다.

    서명 어설션
    어설션은 SAML XML Auth 응답에 서명하여 포함됩니다.
    서명 알고리즘
    SAML 문서에 서명하는 데 사용되는 알고리즘입니다.
    SAML 서명 키 이름

    POST 바인딩을 사용하여 전송된 서명된 SAML 문서에는 KeyName 요소에서 서명 키 식별이 포함됩니다. 이 작업은 SAML 서명 키 이름 옵션을 통해 제어할 수 있습니다. 이 옵션은 Keyname 의 내용을 제어합니다.

    • KEY_ID KeyName 에는 키 ID가 포함됩니다. 이 옵션은 기본 옵션입니다.
    • ovirtRT_SUBJECT KeyName 에는 영역 키에 해당하는 인증서의 제목이 포함되어 있습니다. 이 옵션은 Microsoft Active Directory 페더레이션 서비스에서 기대할 수 있습니다.
    • NONE KeyName 팁은 SAML 메시지에서 완전히 생략됩니다.
    Canonicalization 방법
    XML 서명에 대한 정식화 방법입니다.
    암호화 어설션
    영역 개인 키를 사용하여 SAML 문서의 어설션을 암호화합니다. AES 알고리즘은 128비트의 키 크기를 사용합니다.
    필요한 클라이언트 서명
    클라이언트 서명 필수 인 경우 클라이언트에서 들어오는 문서는 서명될 것으로 예상됩니다. Red Hat Single Sign-On은 Keys 탭에 설정된 클라이언트 공개 키 또는 인증서를 사용하여 이 서명을 검증합니다.
    force POST Binding
    기본적으로 Red Hat Single Sign-On은 원래 요청의 초기 SAML 바인딩을 사용하여 응답합니다. Force POST Binding 을 활성화하면 원래 요청이 리디렉션 바인딩을 사용한 경우에도 Red Hat Single Sign-On은 SAML POST 바인딩을 사용하여 응답합니다.
    프론트 채널 로그아웃
    CloudEvent Channel Logout 이 활성화된 경우 로그아웃을 수행하려면 애플리케이션이 브라우저 리디렉션이 필요합니다. 예를 들어 애플리케이션은 리디렉션을 통해서만 수행할 수 있는 쿠키를 재설정해야 할 수 있습니다. CloudEvent Channel Logout 이 비활성화된 경우 Red Hat Single Sign-On은 백그라운드 SAML 요청을 호출하여 애플리케이션에서 로그아웃합니다.
    force Name ID 형식
    요청에 이름 ID 정책이 있는 경우 이를 무시하고 Name ID Format 아래의 Admin Console에 구성된 값을 사용합니다.
    ECP 흐름 허용
    true인 경우 이 애플리케이션은 인증에 SAML ECP 프로필을 사용할 수 있습니다.
    이름 ID 형식
    주체의 이름 ID 형식입니다. 이 형식은 요청에 이름 ID 정책이 지정되지 않거나 Force Name ID Format 속성이 ON으로 설정된 경우 사용됩니다.
    루트 URL
    Red Hat Single Sign-On에서 구성된 상대 URL을 사용하는 경우 이 값은 URL 앞에 추가됩니다.
    유효한 리디렉션 URI
    URL 패턴을 입력하고 추가할 + 기호를 클릭합니다. 제거하려면 - 기호를 클릭합니다. 저장 을 클릭하여 이러한 변경 사항을 저장합니다. 와일드카드 값은 URL 끝에만 허용됩니다. 예: http://host.com/*$$. 이 필드는 정확한 SAML 끝점이 등록되지 않은 경우 사용되며 Red Hat Single Sign-On은 요청에서 Assertion Consumer URL을 가져옵니다.
    기본 URL
    Red Hat Single Sign-On이 클라이언트에 연결해야 하는 경우 이 URL이 사용됩니다.

로고 URL

클라이언트 애플리케이션의 로고를 참조하는 URL입니다.

정책 URL

Relying Party Client가 프로필 데이터를 사용하는 방법에 대해 읽기 위해 최종 사용자에게 제공하는 URL입니다.

서비스 약관 URL

Relying Party Client가 Relying Party의 서비스 약관을 읽기 위해 최종 사용자에게 제공하는 URL입니다.

마스터 SAML 처리 URL

이 URL은 모든 SAML 요청에 사용되며 응답은 SP로 이동합니다. 어설션 소비자 서비스 URL 및 Single Logout 서비스 URL로 사용됩니다.

로그인 요청에 Assertion Consumer Service URL이 포함된 경우 해당 로그인 요청이 우선합니다. 이 URL은 등록된 유효한 리디렉션 URI 패턴에서 검증해야 합니다.

어설션 소비자 서비스 POST 바인딩 URL
Assertion Consumer 서비스에 대한 POST 바인딩 URL입니다.
어설션 소비자 서비스 리디렉션 바인딩 URL
Assertion Consumer 서비스의 바인딩 URL을 리디렉션합니다.
logout 서비스 POST 바인딩 URL
Logout 서비스의 POST 바인딩 URL입니다.
logout 서비스 리디렉션 바인딩 URL
Logout 서비스의 바인딩 URL을 리디렉션합니다.
Logout Service Artifact Binding URL
Logout 서비스의 아티팩트 바인딩 URL입니다. Force Artifact Binding 옵션과 함께 설정하면 로그인 및 로그아웃 흐름에 대해 Artifact 바인딩이 강제 적용됩니다. 이 속성을 설정하지 않는 한 logout에 아티팩트 바인딩이 사용되지 않습니다.
아티팩트 바인딩 URL
HTTP 아티팩트 메시지를 전송할 URL입니다.
아티팩트 확인 서비스
ArtifactResolve 메시지를 보낼 클라이언트의 URL입니다.

12.2.1. IDP 시작 로그인

IDP 시작 로그인은 특정 애플리케이션/클라이언트에 로그인할 Red Hat Single Sign-On 서버에서 끝점을 설정할 수 있는 기능입니다. 클라이언트의 Settings 탭에서 IDP Initiated SSO URL 이름을 지정해야 합니다. 이 문자열은 공백이 없는 간단한 문자열입니다. 다음 URL에서 클라이언트를 참조할 수 있습니다. root/auth/realms/{realm}/protocol/saml/clients/{url-name}

IDP가 시작한 로그인 구현에서는 REDIRECT 바인딩을 통한 POST 를 선호합니다(자세한 내용은 saml 바인딩 확인). 따라서 최종 바인딩 및 SP URL은 다음과 같은 방법으로 선택됩니다.

  1. 특정 Assertion Consumer Service POST Binding URL 이 정의된 경우(클라이언트 설정의 Fine grain SAML Endpoint Configuration 섹션 제외) 해당 URL을 통해 POST 바인딩이 사용됩니다.
  2. 일반 마스터 SAML 처리 URL 이 지정되면 POST 바인딩이 이 일반 URL을 통해 다시 사용됩니다.
  3. 마지막 수단으로 Assertion Consumer Service Redirect Binding URL 이 구성된 경우 ( Fine grain SAML Endpoint Configuration) REDIRECT 바인딩이 이 URL과 함께 사용됩니다.

클라이언트에 특수 릴레이 상태가 필요한 경우 IDP 초기화 SSO 릴레이 상태 필드의 Settings 탭에서 이 값을 구성할 수도 있습니다. 또는 브라우저가 RelayState 쿼리 매개변수(예: root/auth/realms/{realm}/protocol/saml/clients/{url-name}?RelayState=thestate )에서 릴레이 상태를 지정할 수 있습니다.

ID 브로커를 사용하는 경우 외부 IDP에서 클라이언트에 대한 IDP 시작 로그인을 설정할 수 있습니다. 실제 클라이언트는 위에 설명된 대로 브로커 IDP에서 IDP 시작 로그인에 대해 설정됩니다. 외부 IDP는 IDP에서 선택한 클라이언트의 IDP에서 선택한 클라이언트의 IDP를 가리키는 특수 URL을 가리키는 애플리케이션 IDP 초기화 로그인에 대한 클라이언트를 설정해야 합니다. 즉, 외부 IDP의 클라이언트 설정에서 다음을 의미합니다.

  • IDP Initiated SSO URL 이름은 IDP 시작 로그인 시점으로 게시될 이름으로 설정됩니다.
  • Fine grain SAML Endpoint Configuration 섹션의 어설션 Consumer Service POST Binding URL 은 다음 URL로 설정되어야 합니다. broker-root/auth/realms/{broker-realm}/broker/{idp-name}/endpoint/clients/{client-id}.

    • broker-root 는 기본 브로커 URL입니다.
    • broker-realm 은 외부 IDP가 선언되는 브로커 영역의 이름입니다.
    • IDP-name 은 브로커의 외부 IDP 이름입니다.
    • client-id 는 broker에 정의된 SAML 클라이언트의 IDP 시작 SSO URL 이름 속성 값입니다. 이 클라이언트는 외부 IDP에서 IDP 시작 로그인에 사용할 수 있게 됩니다.

브로커 IDP에서 클라이언트 설정을 외부 IDP로 가져올 수 있습니다. - Brokering IDP의 ID 공급자 설정에서 사용 가능한 SP Descriptor 를 사용하고 client/client-id 를 끝점 URL에 추가합니다.

12.2.2. 엔티티 설명자를 사용하여 클라이언트 생성

SAML 2.0 클라이언트를 수동으로 등록하는 대신 표준 SAML Entity Descriptor XML 파일을 사용하여 클라이언트를 가져올 수 있습니다.

클라이언트 추가 페이지에 가져오기 옵션이 포함되어 있습니다.

클라이언트 추가

add client saml

절차

  1. 파일 선택을 클릭합니다.
  2. XML 엔티티 설명자 정보가 포함된 파일을 로드합니다.
  3. 정보를 검토하여 모든 항목이 올바르게 설정되었는지 확인합니다.

mod-auth-mellon 과 같은 일부 SAML 클라이언트 어댑터에는 IDP의 XML Entity Descriptor가 필요합니다. 이 URL로 이동하여 이 설명자를 찾을 수 있습니다.

root/auth/realms/{realm}/protocol/saml/descriptor

여기서 realm 은 클라이언트의 영역입니다.

12.4. OIDC 토큰 및 SAML 어설션 매핑

ID 토큰, 액세스 토큰 또는 SAML 어설션을 수신하는 애플리케이션에는 다른 역할 및 사용자 메타데이터가 필요할 수 있습니다.

Red Hat Single Sign-On을 사용하여 다음을 수행할 수 있습니다.

  • 하드 코드 역할, 클레임 및 사용자 지정 속성.
  • 사용자 메타데이터를 토큰 또는 어설션으로 가져옵니다.
  • 역할의 이름을 바꿉니다.

관리 콘솔의 Mappers 탭에서 이러한 작업을 수행합니다.

매퍼 탭

mappers oidc

새 클라이언트에는 매퍼가 내장되어 있지 않지만 클라이언트 범위에서 일부 매퍼를 상속할 수 있습니다. 자세한 내용은 클라이언트 범위 섹션 을 참조하십시오.

프로토콜 매퍼는 항목(예: 이메일 주소)을 ID 및 액세스 토큰의 특정 클레임에 매핑합니다. 매퍼의 기능은 이름에서 자체 설명되어야 합니다. Builtin 추가를 클릭하여 사전 구성된 매퍼를 추가합니다.

각 매퍼에는 공통 설정 세트가 있습니다. 매퍼 유형에 따라 추가 설정을 사용할 수 있습니다. 매퍼 옆에 있는 Edit (편집)를 클릭하여 구성 화면에 액세스하여 이러한 설정을 조정합니다.

매퍼 구성

mapper config

각 옵션에 대한 세부 정보는 툴팁을 마우스로 이동하여 볼 수 있습니다.

대부분의 OIDC 매퍼를 사용하여 클레임이 배치되는 위치를 제어할 수 있습니다. ID 토큰에 추가 및 토큰에 액세스하도록 Add를 조정하여 ID 및 액세스 토큰 에서 클레임을 포함하거나 제외 하도록 선택합니다.

다음과 같이 매퍼 유형을 추가할 수 있습니다.

절차

  1. Mappers 탭으로 이동합니다.
  2. 생성을 클릭합니다.

    매퍼 추가

    add mapper

  3. 목록 상자에서 매퍼 유형을 선택합니다.

12.4.1. 우선순위 순서

매퍼 구현에는 우선순위 순서가 있습니다. 우선순위 순서는 매퍼의 구성 속성이 아닙니다. 이는 매퍼의 구체적인 구현의 속성입니다.

매퍼는 매퍼 목록에 있는 순서에 따라 정렬됩니다. 토큰 또는 어설션의 변경 사항은 가장 낮은 적용 먼저 적용되도록 적용됩니다. 따라서 다른 구현에 종속된 구현은 필요한 순서로 처리됩니다.

예를 들어 토큰에 포함될 역할을 계산하려면 다음을 수행합니다.

  1. 이러한 역할을 기반으로 대상을 해결합니다.
  2. 토큰에서 이미 사용 가능한 역할 및 대상을 사용하는 JavaScript 스크립트를 처리합니다.

12.4.2. OIDC 사용자 세션 노트 매퍼

사용자 세션 세부 정보는 매퍼를 사용하여 정의되며 클라이언트에서 기능을 사용하거나 활성화할 때 자동으로 포함됩니다. 세션 세부 정보를 포함하려면 기본 제공 추가 를 클릭합니다.

가장 사용자 세션은 다음과 같은 세부 정보를 제공합니다.

  • IMPERSONATOR_ID: 가장하는 사용자의 ID입니다.
  • IMPERSONATOR_USERNAME: 가장하는 사용자의 사용자 이름입니다.

서비스 계정 세션은 다음과 같은 세부 정보를 제공합니다.

  • ClientID: 서비스 계정의 클라이언트 ID입니다.
  • clientAddress: 서비스 계정의 인증된 장치의 원격 호스트 IP입니다.
  • clientHost: 서비스 계정의 인증된 장치의 원격 호스트 이름입니다.

12.4.3. 스크립트 매퍼

스크립트 매퍼 를 사용하여 사용자 정의 JavaScript 코드를 실행하여 토큰에 클레임을 매핑합니다. 서버에 스크립트를 배포하는 방법에 대한 자세한 내용은 JavaScript Provider 를 참조하십시오.

스크립트가 배포하는 경우 사용 가능한 매퍼 목록에서 배포된 스크립트를 선택할 수 있어야 합니다.

12.5. 클라이언트 어댑터 구성 생성

Red Hat Single Sign-On은 애플리케이션 배포 환경에 클라이언트 어댑터를 설치하는 데 사용할 수 있는 구성 파일을 생성할 수 있습니다. OIDC 및 SAML에서 다양한 어댑터 유형이 지원됩니다.

  1. 구성을 생성할 클라이언트의 설치 탭으로 이동합니다.

    client installation

  2. 구성이 생성될 형식 옵션을 선택합니다.

OIDC 및 SAML의 모든 Red Hat Single Sign-On 클라이언트 어댑터가 지원됩니다. SAML용 mod-auth-mellon Apache HTTPD 어댑터는 표준 SAML 엔티티 설명자 파일도 지원됩니다.

12.6. 클라이언트 범위

Red Hat Single Sign-On을 사용하여 클라이언트 범위라는 엔티티에서 공유 클라이언트 구성을 정의합니다. 클라이언트 범위는 여러 클라이언트에 대한 프로토콜 매퍼역할 범위 매핑을 구성합니다.

클라이언트 범위도 OAuth 2 범위 매개 변수를 지원합니다. 클라이언트 애플리케이션에서는 이 매개변수를 사용하여 애플리케이션 요구 사항에 따라 액세스 토큰에서 클레임 또는 역할을 요청합니다.

클라이언트 범위를 생성하려면 다음 단계를 따르십시오.

  1. 메뉴에서 클라이언트 범위를 클릭합니다.

    클라이언트 범위 목록

    client scopes list

  2. 생성을 클릭합니다.
  3. 클라이언트 범위의 이름을 지정합니다.
  4. 저장을 클릭합니다.

클라이언트 범위에 는 일반 클라이언트와 유사한 탭이 있습니다. 프로토콜 매퍼역할 범위 매핑을 정의할 수 있습니다. 이러한 매핑은 다른 클라이언트에서 상속할 수 있으며 이 클라이언트 범위에서 상속되도록 구성됩니다.

12.6.1. 프로토콜

클라이언트 범위를 만들 때 프로토콜을 선택합니다. 동일한 범위에 연결된 클라이언트는 동일한 프로토콜을 보유해야 합니다.

각 영역에는 메뉴에 사전 정의된 기본 제공 클라이언트 범위 세트가 있습니다.

  • SAML 프로토콜: role_list. 이 범위에는 SAML 어설션의 역할 목록에 대한 하나의 프로토콜 매퍼가 포함되어 있습니다.
  • OpenID Connect 프로토콜: 여러 클라이언트 범위를 사용할 수 있습니다.

    • 역할

      이 범위는 OpenID Connect 사양에 정의되지 않으며 액세스 토큰의 범위 클레임에 자동으로 추가되지 않습니다. 이 범위에는 사용자의 역할을 액세스 토큰에 추가하고 하나 이상의 클라이언트 역할이 있는 클라이언트의 대상을 추가하는 데 사용되는 매퍼가 있습니다. 이러한 매퍼는ECDHE 섹션에 자세히 설명되어 있습니다.

    • web-origins

      이 범위는 OpenID Connect 사양에도 정의되지 않으며 액세스 토큰을 요청하는 범위에 추가되지 않습니다. 이 범위는 허용된 웹 출처를 액세스 토큰 allowed-origins 클레임에 추가하는 데 사용됩니다.

    • microprofile-jwt

      이 범위는 MicroProfile/JWT Auth Specification 에 정의된 클레임을 처리합니다. 이 범위는 upn 클레임에 대한 사용자 속성 매퍼와 groups 클레임에 대한 영역 역할 매퍼를 정의합니다. 이러한 매퍼는 MicroProfile/JWT별 클레임을 생성하는 데 다른 속성을 사용할 수 있도록 변경할 수 있습니다.

    • offline_access

      이 범위는 클라이언트가 오프라인 토큰을 가져와야 하는 경우에 사용됩니다. 오프라인 토큰에 대한 자세한 내용은 오프라인 액세스 섹션OpenID Connect 사양에서 확인할 수 있습니다.

    • profile
    • email
    • address
    • 전화

클라이언트 범위 프로필,이메일,주소전화는 OpenID Connect 사양에 정의됩니다. 이러한 범위에는 역할 범위 매핑이 정의되어 있지 않지만 프로토콜 매퍼가 정의되어 있습니다. 이러한 매퍼는 OpenID Connect 사양에 정의된 클레임에 해당합니다.

예를 들어 전화 클라이언트 범위를 열고 Mappers 탭을 열면 범위 전화에 대한 사양에 정의된 클레임에 해당하는 프로토콜 매퍼가 표시됩니다.

클라이언트 범위 매퍼

client scopes phone

전화 클라이언트 범위가 클라이언트에 연결되면 클라이언트는 전화 클라이언트 범위에 정의된 모든 프로토콜 매퍼를 자동으로 상속합니다. 이 클라이언트에 대해 발행된 액세스 토큰에는 사용자가 정의된 전화 번호가 있다고 가정하여 사용자에 대한 전화 번호 정보가 포함됩니다.

내장 클라이언트 범위에는 사양에 정의된 프로토콜 매퍼가 포함되어 있습니다. 클라이언트 범위를 편집하고 프로토콜 매퍼 또는 역할 범위 매핑을 생성, 업데이트 또는 제거할 수 있습니다.

12.6.3. 클라이언트 범위 연결

클라이언트 범위와 클라이언트 간의 연결은 클라이언트의 클라이언트 범위 탭에서 구성됩니다. 클라이언트 범위와 클라이언트 간 연결하는 두 가지 방법을 사용할 수 있습니다.

기본 클라이언트 범위
이 설정은 OpenID Connect 및 SAML 클라이언트에 적용할 수 있습니다. 클라이언트에 대한 OpenID Connect 토큰 또는 SAML 어설션을 발행할 때 기본 클라이언트 범위가 적용됩니다. 클라이언트는 클라이언트 범위에 정의된 프로토콜 매퍼 및 역할 범위 매핑을 상속합니다. OpenID Connect 프로토콜의 경우 OpenID Connect 권한 부여 요청의 scope 매개변수에 사용된 값과 관계없이 매퍼 및 역할 범위 매핑이 항상 적용됩니다.
선택적 클라이언트 범위
이 설정은 OpenID Connect 클라이언트에만 적용할 수 있습니다. 선택적 클라이언트 범위는 이 클라이언트의 토큰을 발행할 때 적용되지만 OpenID Connect 권한 부여 요청에서 scope 매개변수에 의해 요청된 경우에만 적용됩니다.
12.6.3.1. 예제

이 예에서는 클라이언트에 기본 클라이언트 범위로 연결된 프로필이메일전화주소가 선택적 클라이언트 범위로 연결되어 있다고 가정합니다. 클라이언트는 OpenID Connect 권한 부여 끝점으로 요청을 보낼 때 scope 매개변수의 값을 사용합니다.

scope=openid phone

scope 매개 변수에는 범위 값이 공백으로 구분된 문자열이 포함되어 있습니다. openid 값은 모든 OpenID Connect 요청에 사용되는 메타 값입니다. 토큰은 기본 클라이언트 범위 프로필이메일 의 매퍼 및 역할 범위 매핑과 범위 매개 변수에서 요청한 선택적 클라이언트 범위를 포함합니다.

12.6.4. 클라이언트 범위 평가

Mappers 탭에는 프로토콜 매퍼가 포함되어 있으며 범위 탭에는 이 클라이언트에 대해 선언된 역할 범위 매핑이 포함되어 있습니다. 클라이언트 범위에서 상속된 매퍼 및 범위 매핑은 포함되어 있지 않습니다. 효과적인 프로토콜 매퍼(즉, 클라이언트 자체에 정의된 프로토콜 매퍼 및 연결된 클라이언트 범위에서 상속됨) 및 클라이언트에 대한 토큰을 생성할 때 사용되는 효과적인 역할 범위 매핑을 확인할 수 있습니다.

절차

  1. 클라이언트의 클라이언트 범위 탭을 클릭합니다.
  2. 하위 탭 Evaluate 를 엽니다.
  3. 적용하려는 선택적 클라이언트 범위를 선택합니다.

또한 scope 매개변수의 값을 표시합니다. 이 매개변수는 애플리케이션에서 Red Hat Single Sign-On OpenID Connect 권한 부여 엔드포인트로 보내야 합니다.

클라이언트 범위 평가

client scopes evaluate

참고

애플리케이션에서 범위 매개변수에 대한 사용자 지정 값을 보내려면 JavaScript 어댑터 또는 javascript 어댑터의 경우 매개 변수 전달 섹션 을 참조하십시오.

모든 예제는 특정 사용자에 대해 생성되고 scope 매개변수의 지정된 값을 사용하여 특정 클라이언트에 대해 발행됩니다. 예제에는 사용된 모든 클레임 및 역할 매핑이 포함됩니다.

12.6.5. 클라이언트 범위 권한

사용자에게 토큰을 발행할 때 클라이언트 범위는 사용자가 사용할 수 있는 경우에만 적용됩니다.

클라이언트 범위에 역할 범위 매핑이 정의되지 않은 경우 각 사용자는 이 클라이언트 범위를 사용할 수 있습니다. 그러나 클라이언트 범위에 역할 범위 매핑이 정의되어 있는 경우 사용자는 역할 중 하나 이상의 멤버여야 합니다. 사용자 역할과 클라이언트 범위의 역할 간에 교집합이 있어야 합니다. 복합 역할은 이러한 교집합을 평가할 때 고려됩니다.

사용자가 클라이언트 범위를 사용할 수 없는 경우 토큰을 생성할 때 프로토콜 매퍼 또는 역할 범위 매핑이 사용되지 않습니다. 클라이언트 범위는 토큰의 범위 값에 표시되지 않습니다.

12.6.6. 영역 기본 클라이언트 범위

CloudEvent 기본 클라이언트 범위를 사용하여 새로 생성된 클라이언트에 자동으로 연결된 클라이언트 범위 집합을 정의합니다.

절차

  1. 클라이언트의 클라이언트 범위 탭을 클릭합니다.
  2. Default Client Scopes 를 클릭합니다.

여기에서 새로 생성된 클라이언트 범위 및 선택적 클라이언트 범위에 기본 클라이언트 범위로 추가할 클라이언트 범위를 선택합니다.

기본 클라이언트 범위

client scopes default

클라이언트를 만들 때 필요한 경우 기본 클라이언트 범위의 연결을 해제할 수 있습니다. 이는 기본 역할 제거와 유사합니다.

12.6.7. 설명되는 범위

클라이언트 범위
클라이언트 범위는 영역 수준에서 구성되며 클라이언트에 연결할 수 있는 Red Hat Single Sign-On의 엔티티입니다. 클라이언트 범위는 요청이 scope 매개변수의 해당 값으로 Red Hat Single Sign-On 권한 부여 끝점으로 전송될 때 이름에서 참조합니다. 자세한 내용은 클라이언트 범위 연결 섹션을 참조하십시오.
역할 범위 매핑
클라이언트 또는 클라이언트 범위의 범위 탭에서 사용할 수 있습니다. 역할 범위 매핑 을 사용하여 액세스 토큰에 사용할 수 있는 역할을 제한합니다. 자세한 내용은 역할 범위 매핑 섹션을 참조하십시오.

12.7. 클라이언트 정책

클라이언트 애플리케이션을 쉽게 보호할 수 있도록 하려면 다음 사항을 통합된 방식으로 구현하는 것이 좋습니다.

  • 클라이언트에서 보유할 수 있는 구성에 대한 정책 설정
  • 클라이언트 구성 검증
  • FAPI(Flanin-grade API)와 같은 필수 보안 표준 및 프로파일 준수

이러한 점을 통합된 방식으로 실현하기 위해 클라이언트 정책 개념이 도입되었습니다.

12.7.1. 사용 사례

클라이언트 정책은 다음과 같은 점을 인지하고 있습니다.

클라이언트에서 보유할 수 있는 구성에 대한 정책 설정
클라이언트의 구성 설정은 클라이언트 생성/업데이트 중에 클라이언트 정책에서 시행할 수 있지만 특정 클라이언트와 관련된 Red Hat Single Sign-On 서버에 대한 OpenID Connect 요청 중에도 적용할 수 있습니다. Red Hat Single Sign-On은 보안 애플리케이션 및 서비스 가이드에 설명된 클라이언트 등록 정책을 통해 유사한 기능을 지원합니다. 그러나 클라이언트 등록 정책은 OIDC 동적 클라이언트 등록만 처리할 수 있습니다. 클라이언트 정책에는 클라이언트 등록 정책이 수행할 수 있는 작업뿐만 아니라 다른 클라이언트 등록 및 구성 방법이 포함됩니다. 현재 계획은 클라이언트 등록이 클라이언트 정책으로 대체되는 것입니다.
클라이언트 구성 검증
Red Hat Single Sign-On은 코드 교환을 위한 Proof Key for Code Security, Request Object Signing Algorithm, Holder-of-Key Token 등과 같은 설정을 따르는지 여부를 검증할 수 있습니다. 각 설정 항목(관리 콘솔, 스위치, 풀다운 메뉴 등)으로 지정할 수 있습니다. 클라이언트 애플리케이션을 보호하려면 관리자가 적절한 방식으로 많은 설정을 설정해야 하므로 관리자가 클라이언트 애플리케이션을 보호하기가 어렵습니다. 클라이언트 정책에서는 위에서 언급한 클라이언트 구성에 대해 이러한 유효성 검사를 수행할 수 있으며 고급 보안 요구 사항을 충족하도록 일부 클라이언트 구성 스위치를 자동으로 설정할 수도 있습니다. 향후 개별 클라이언트 구성 설정은 필요한 검증을 직접 수행하는 클라이언트 정책으로 대체될 수 있습니다.
FAPI와 같은 필수 보안 표준 및 프로파일 준수
글로벌 클라이언트 프로필 은 기본적으로 Red Hat Single Sign-On에서 사전 구성된 클라이언트 프로필입니다. 이는 FAPI 와 같은 표준 보안 프로필을 준수하도록 사전 구성되어 있으므로 관리자가 특정 보안 프로필을 준수하도록 클라이언트 애플리케이션을 쉽게 보호할 수 있습니다. 현재 Red Hat Single Sign-On에는 FAPI 1 사양 지원을 위한 글로벌 프로필이 있습니다. 관리자는 FAPI를 준수해야 하는 클라이언트를 지정하도록 클라이언트 정책을 구성해야 합니다. 관리자는 클라이언트 프로필 및 클라이언트 정책을 구성할 수 있으므로 Red Hat Single Sign-On 클라이언트가 SPA, Native App, Open CloudEventing 등과 같은 다른 다양한 보안 프로필을 쉽게 준수할 수 있습니다.

12.7.2. 프로토콜

클라이언트 정책 개념은 특정 프로토콜과 독립적입니다. 그러나 Red Hat Single Sign-On은 현재 OpenID Connect (OIDC) 프로토콜 에서만 지원합니다.

12.7.3. 아키텍처

클라이언트 정책은 Condition, Executor, Profile 및 Policy의 네 가지 구성 요소로 구성됩니다.

12.7.3.1. 상태

조건은 정책이 채택되는 클라이언트와 채택 시기를 결정합니다. 클라이언트 요청(OIDC 인증 요청, 토큰 끝점 요청 등) 중에 다른 조건을 확인하는 경우 클라이언트 생성/업데이트 시점에 일부 조건이 확인됩니다. 이 조건은 지정된 기준이 충족되었는지 확인합니다. 예를 들어 일부 조건은 클라이언트의 액세스 유형이 기밀인지 여부를 확인합니다.

조건 자체는 단독으로 사용할 수 없습니다. 나중에 설명하는 정책에서 사용할 수 있습니다.

조건은 다른 구성 가능한 공급자와 동일하게 구성할 수 있습니다. 구성할 수 있는 것은 각 조건의 특성에 따라 다릅니다.

다음 조건이 제공됩니다.

클라이언트를 생성/업데이트하는 방법
  • 동적 클라이언트 등록(초기 액세스 토큰 또는 등록 액세스 토큰으로 익명 또는 인증)
  • 관리 REST API(Admin 콘솔 등)

예를 들어 클라이언트를 생성할 때 이 클라이언트가 초기 액세스 토큰(Anonymous Dynamic Client Registration) 없이 OIDC Dynamic Client Registration에 의해 생성될 때 이 클라이언트를 true로 평가하도록 구성할 수 있습니다. 따라서 이 조건을 사용하여 OIDC 동적 클라이언트 등록을 통해 등록된 모든 클라이언트가 FAPI 준수 여부를 확인할 수 있습니다.

클라이언트의 작성자(특정 역할 또는 그룹에 존재함)
OpenID Connect 동적 클라이언트 등록에서 클라이언트의 작성자는 액세스 토큰을 사용하여 실제로 등록 엔드포인트에 액세스하는 기존 클라이언트의 서비스 계정이 아닌 새 클라이언트를 생성하기 위한 액세스 토큰을 가져오기 위해 인증된 최종 사용자입니다. Admin REST API에서 등록하면 클라이언트의 작성자는 Red Hat Single Sign-On 관리자와 같은 최종 사용자입니다.
클라이언트 액세스 유형 (기밀, 공용, 베어러 전용)
예를 들어 클라이언트가 권한 부여 요청을 보내면 이 클라이언트가 비공개인 경우 정책이 채택됩니다.
클라이언트 범위
클라이언트에 특정 클라이언트 범위(기본값 또는 현재 요청에 사용된 선택적 범위)가 있는 경우 true로 평가됩니다. 예를 들어 fapi-example-scope 범위의 OIDC 권한 부여 요청이 FAPI 호환이 되도록 할 수 있습니다.
클라이언트 역할
지정된 이름의 클라이언트 역할이 있는 클라이언트에 적용
클라이언트 도메인 이름, 호스트 또는 IP 주소
클라이언트의 특정 도메인 이름에 적용됩니다. 또는 관리자가 특정 호스트 또는 IP 주소에서 클라이언트를 등록/업데이트하는 경우.
모든 클라이언트
이 조건은 항상 true로 평가됩니다. 예를 들어 특정 영역의 모든 클라이언트가 FAPI 준수 여부를 확인하는 데 사용할 수 있습니다.
12.7.3.2. executor

executor는 정책이 채택되는 클라이언트에서 실행되는 작업을 지정합니다. executor는 하나 또는 여러 개의 지정된 작업을 실행합니다. 예를 들어 일부 executor는 권한 부여 요청의 매개변수 redirect_uri 값이 권한 부여 끝점의 사전 등록된 리디렉션 URI 중 하나와 정확히 일치하는지 확인하고 그렇지 않은 경우 이 요청을 거부합니다.

Exutor는 단독으로 사용할 수 없습니다. 나중에 설명하는 프로필에서 사용할 수 있습니다. ???

executor는 다른 구성 가능한 공급자와 동일하게 구성할 수 있습니다. 구성할 수 있는 것은 각 executor의 특성에 따라 다릅니다.

executor는 다양한 이벤트에 대해 작동합니다. executor 구현에서는 특정 유형의 이벤트를 무시할 수 있습니다(예: OIDC 요청 개체 확인에 대한 executor는 OIDC 권한 부여 요청에서만 작동합니다). 이벤트는 다음과 같습니다.

  • 클라이언트 생성(동적 클라이언트 등록을 통한 생성 포함)
  • 클라이언트 업데이트
  • 권한 부여 요청 전송
  • 토큰 요청 전송
  • 토큰 새로 고침 요청 전송
  • 토큰 해지 요청 전송
  • 토큰 인트로스펙션 요청 전송
  • userinfo 요청 전송
  • 새로 고침 토큰을 사용하여 로그 아웃 요청 전송

각 이벤트에서 executor는 여러 단계에서 작업할 수 있습니다. 예를 들어 클라이언트를 생성/업데이트할 때 executor는 특정 클라이언트 설정을 자동 구성하여 클라이언트 구성을 수정할 수 있습니다. 그 후 executor는 검증 단계에서 이 설정을 검증합니다.

이 실행자를 위한 몇 가지 목적 중 하나는 FAPI와 같은 클라이언트 적합성 프로파일의 보안 요구 사항을 실현하는 것입니다. 이렇게 하려면 다음 실행자가 필요합니다.

  • 클라이언트에 보안 클라이언트 인증 방법이 사용됩니다.Enforce Secure Client Authentication method is used for the client
  • enforce Holder-of-key 토큰 사용
  • 코드 교환에 대한 Proof Key 적용 (PKCE) 사용
  • 서명 JWT 클라이언트 인증 (private-key-jwt) 에 대한 보안 서명 알고리즘 적용
  • HTTPS 리디렉션 URI를 적용하고 구성된 리디렉션 URI에 와일드카드가 포함되어 있지 않은지 확인합니다.
  • 높은 보안 수준을 충족하는 OIDC 요청 오브젝트 적용
  • FAPI 1 사양에 설명된 대로 분리된 서명 을 포함하여 OIDC 하이브리드 워크플로우의 응답 유형을 시행합니다. 즉, 인증 응답에서 반환된 ID 토큰에는 사용자 프로필 데이터가 포함되지 않습니다.
  • CSRF를 방지하기 위해 보다 안전한 상태nonce 매개 변수 처리를 시행
  • 클라이언트 등록 시 보안 서명 알고리즘 적용
  • CIBA 요청에 바인딩_message 매개변수 적용
  • 클라이언트 보안 순환적용
12.7.3.3. 프로필

프로필은 FAPI와 같은 보안 프로필을 실현할 수 있는 여러 실행자로 구성됩니다. 프로필은 executors와 함께 Admin REST API(Admin Console)에서 구성할 수 있습니다. 세 개의 글로벌 프로필이 있으며 사전 구성된 실행자, FAPI Advanced 및 FAPI CIBA 사양을 준수하여 기본적으로 Red Hat Single Sign-On에서 구성됩니다. 보다 자세한 내용은 보안 애플리케이션 및 서비스 가이드의 F API 섹션에 있습니다.

12.7.3.4. 정책

정책은 여러 조건과 프로필로 구성됩니다. 이 정책은 이 정책의 모든 조건을 충족하는 고객에게 채택될 수 있습니다. 이 정책은 여러 프로필을 참조하며 이러한 프로필의 모든 실행자는 이 정책이 적용된 클라이언트에 대해 작업을 실행합니다.

12.7.4. 설정

정책, 프로필, 조건, executors는 Admin REST API(관리 콘솔)에서도 구성할 수 있습니다. 이를 위해 관리자가 영역 클라이언트 정책을 가질 수 있음을 의미합니다.

글로벌 클라이언트 프로필 은 각 영역에서 자동으로 사용할 수 있습니다. 그러나 기본적으로 구성된 클라이언트 정책은 없습니다. 즉, 관리자는 예를 들어 해당 영역의 클라이언트가 FAPI를 준수하도록 하려면 항상 클라이언트 정책을 생성해야 합니다. 글로벌 프로필은 업데이트할 수 없지만 관리자는 글로벌 프로필 구성에서 약간의 변경을 수행하려는 경우 관리자가 쉽게 템플릿을 사용하여 자체 프로필을 만들 수 있습니다. 관리 콘솔에서 사용할 수 있는 JSON 편집기가 있으며 일부 글로벌 프로필을 기반으로 새 프로필 생성을 단순화합니다.

12.7.5. 이전 버전과의 호환성

클라이언트 정책은 보안 애플리케이션 및 서비스 가이드에 설명된 클라이언트 등록 정책을 대체할 수 있습니다. 그러나 클라이언트 등록 정책도 여전히 공존합니다. 즉, 예를 들어 클라이언트를 생성/업데이트하기 위한 동적 클라이언트 등록 요청 중에 클라이언트 정책과 클라이언트 등록 정책이 모두 적용됩니다.

현재 계획은 클라이언트 등록 정책 기능을 제거하고 기존 클라이언트 등록 정책이 새 클라이언트 정책으로 자동 마이그레이션됩니다.

12.7.6. 클라이언트 시크릿 순환 예

클라이언트 시크릿 순환 의 구성 예를 참조하십시오.

13장. 자격 증명 모음을 사용하여 시크릿 가져오기

직접 입력하지 않고 자격 증명 모음에서 시크릿을 얻으려면 다음 특수하게 조작된 문자열을 적절한 필드에 입력합니다.

**${vault.**_key_**}**

여기서 키는 자격 증명 모음에서 인식하는 시크릿의 이름입니다.

Red Hat Single Sign-On은 영역 이름 및 자격 증명 모음 식에서 얻은 와 시크릿이 유출되지 않도록 합니다. 이 방법은 키가 자격 증명 모음의 항목에 직접 매핑되지 않지만 키 를 영역 이름과 결합하는 데 사용되는 알고리즘에 따라 최종 항목 이름을 생성함을 의미합니다.

다음 필드의 자격 증명 모음에서 보안을 가져올 수 있습니다.

SMTP 암호
영역 SMTP 설정
LDAP 바인딩 인증 정보
LDAP 기반 사용자 페더레이션의 LDAP 설정에서.
OIDC ID 공급자 시크릿
OpenID Connect Config내부의 클라이언트 시크릿 에서

자격 증명 모음을 사용하려면 Red Hat Single Sign-On에 자격 증명 모음 공급자를 등록합니다. 여기에 설명된 공급자를 사용하거나 공급자를 구현할 수 있습니다. 자세한 내용은 서버 개발자 가이드를 참조하십시오.

참고

Red Hat Single Sign-On에서는 한 번에 Red Hat Single Sign-On 인스턴스당 최대 하나의 활성 자격 증명 모음 공급자를 사용할 수 있습니다. 클러스터 내의 각 인스턴스에서 자격 증명 모음 공급자를 일관되게 구성합니다.

13.1. Kubernetes / OpenShift 파일 일반 텍스트 자격 증명 모음 공급자

Red Hat Single Sign-On은 Kubernetes 보안에 대한 자격 증명 모음 구현을 지원합니다. Kubernetes 시크릿을 데이터 볼륨으로 마운트할 수 있으며 플랫 파일 구조가 있는 디렉터리로 표시됩니다. Red Hat Single Sign-On은 각 시크릿을 시크릿 이름으로, 파일의 내용을 시크릿 값으로 사용하는 파일로 나타냅니다.

이 디렉터리의 파일 이름은 영역 이름 및 밑줄이 붙은 시크릿 이름으로 지정해야 합니다. 보안 이름 또는 파일 이름의 영역 이름 내에서 밑줄을 두 배로 늘립니다. 예를 들어 sso_realm 이라는 영역에 있는 필드의 경우 secret-name 이라는 보안에 대한 참조는 ${vault.secret-name} 로 작성되고, 조회된 파일 이름은 sso__realm_secret-name 입니다. 영역 이름에 밑줄을 두 배로 늘립니다.

이러한 유형의 시크릿 저장소를 사용하려면 standalone.xml 파일에서 files-plaintext 자격 증명 모음 공급자를 선언하고 마운트된 볼륨이 포함된 디렉터리에 대한 매개 변수를 설정해야 합니다. 이 예에서는 자격 증명 모음 파일이 Red Hat Single Sign-On 기본 디렉터리를 기준으로 standalone/configuration/vault 로 설정된 디렉터리가 있는 files-plaintext 공급자를 보여줍니다.

<spi name="vault">
    <default-provider>files-plaintext</default-provider>
    <provider name="files-plaintext" enabled="true">
        <properties>
            <property name="dir" value="${jboss.home.dir}/standalone/configuration/vault/" />
        </properties>
    </provider>
</spi>

다음은 CLI 명령을 사용하는 것과 동등한 구성입니다.

/subsystem=keycloak-server/spi=vault/:add
/subsystem=keycloak-server/spi=vault/provider=files-plaintext/:add(enabled=true,properties={dir => "${jboss.home.dir}/standalone/configuration/vault"})
/subsystem=keycloak-server/spi=vault:write-attribute(name=default-provider,value=files-plaintext)

13.2. Elytron 자격 증명 저장소 자격 증명 모음 공급자

Red Hat Single Sign-On은 Elytron 자격 증명 저장소에 저장된 시크릿 읽기 지원도 제공합니다. elytron-cs-keystore 자격 증명 모음 공급자는 기본 구현 Elytron이 제공하는 자격 증명 저장소의 키 저장소 기반 구현에서 시크릿을 검색할 수 있습니다.

키 저장소는 이 인증 정보 저장소를 백업합니다. JCEKS 는 기본 형식이지만 PKCS12 와 같은 다른 형식을 사용할 수 있습니다. 사용자는 WildFly/JBoss EAP 또는 elytron -tool.sh 스크립트에서 elytron 하위 시스템을 사용하여 저장 콘텐츠를 생성하고 관리할 수 있습니다.

이 공급자를 사용하려면 keycloak-server 하위 시스템에 elytron-cs-keystore 를 선언하고 Elytron에서 생성한 키 저장소의 위치 및 마스터 시크릿을 설정해야 합니다. 공급자에 대한 최소 구성의 예는 다음과 같습니다.

<spi name="vault">
    <default-provider>elytron-cs-keystore</default-provider>
    <provider name="elytron-cs-keystore" enabled="true">
        <properties>
            <property name="location" value="${jboss.home.dir}/standalone/configuration/vault/credential-store.jceks" />
            <property name="secret" value="secretpw1!"/>
        </properties>
    </provider>
</spi>

기본 키 저장소의 형식이 JCEKS 와 다른 경우 keyStoreType:을 사용하여 이 형식을 지정해야 합니다.

<spi name="vault">
    <default-provider>elytron-cs-keystore</default-provider>
    <provider name="elytron-cs-keystore" enabled="true">
        <properties>
            <property name="location" value="${jboss.home.dir}/standalone/configuration/vault/credential-store.p12" />
            <property name="secret" value="secretpw1!"/>
            <property name="keyStoreType" value="PKCS12"/>
        </properties>
    </provider>
</spi>

시크릿의 경우 elytron-cs-keystore 공급자는 elytron-tool.sh 스크립트를 사용하여 일반 텍스트 값과 마스킹된 값을 지원합니다.

<spi name="vault">
   ...
            <property name="secret" value="MASK-3u2HNQaMogJJ8VP7J6gRIl;12345678;321"/>
   ...
</spi>

elytron 자격 증명 저장소 및 키 저장소 시크릿을 만들고 관리하는 방법에 대한 자세한 내용은 Elytron 문서를 참조하십시오.

참고

Red Hat Single Sign-On은 elytron-cs-keystore 자격 증명 모음 공급자를 WildFly 확장으로 구현하고 Red Hat Single Sign-On 서버가 WildFly/JBoss EAP에서만 실행되는 경우에만 사용할 수 있습니다.

13.3. 주요 해결자

모든 기본 제공 공급자는 주요 해결자의 구성을 지원합니다. 키 확인자는 ${vault.key} 표현식에서 자격 증명 모음에서 시크릿을 검색하는 데 사용되는 최종 항목 이름으로 영역 이름을 키와 결합하는 알고리즘 또는 전략을 구현합니다. Red Hat Single Sign-On은 keyResolvers 속성을 사용하여 공급자가 사용하는 해결 프로그램을 구성합니다. 값은 쉼표로 구분된 확인자 이름 목록입니다. files-plaintext provider에 대한 구성 예는 다음과 같습니다.

<spi name="vault">
    <default-provider>files-plaintext</default-provider>
    <provider name="files-plaintext" enabled="true">
        <properties>
            <property name="dir" value="${jboss.home.dir}/standalone/configuration/vault/" />
            <property name="keyResolvers" value="REALM_UNDERSCORE_KEY, KEY_ONLY"/>
        </properties>
    </provider>
</spi>

해결자는 구성에서 선언하는 것과 동일한 순서로 실행됩니다. Red Hat Single Sign-On은 각 확인자에서 생성하는 마지막 항목 이름을 사용하여 영역을 자격 증명 모음 키와 결합하여 자격 증명 모음의 시크릿을 검색합니다. Red Hat Single Sign-On이 시크릿을 발견하면 시크릿이 반환됩니다. 그렇지 않은 경우 Red Hat Single Sign-On은 다음 해결 프로그램을 사용합니다. 이 검색은 Red Hat Single Sign-On이 비어 있지 않은 시크릿을 발견하거나 해결자를 실행할 때까지 계속됩니다. Red Hat Single Sign-On에서 시크릿을 찾을 수 없는 경우 Red Hat Single Sign-On에서 빈 시크릿을 반환합니다.

이전 예에서 Red Hat Single Sign-On은 REALM_UNDERSCORE_KEY 확인 프로그램을 먼저 사용합니다. Red Hat Single Sign-On이 해당 확인자를 사용하여 자격 증명 모음에서 항목을 발견하면 Red Hat Single Sign-On에서 해당 항목을 반환합니다. 그렇지 않은 경우 Red Hat Single Sign-On은 KEY_ONLY resolver를 다시 검색합니다. Red Hat Single Sign-On이 KEY_ONLY resolver를 사용하여 항목을 발견하면 Red Hat Single Sign-On에서 해당 항목을 반환합니다. Red Hat Single Sign-On에서 모든 해결 방법을 사용하는 경우 Red Hat Single Sign-On에서 빈 시크릿을 반환합니다.

현재 사용 가능한 해결 방법 목록은 다음과 같습니다.

이름설명

KEY_ONLY

Red Hat Single Sign-On은 영역 이름을 무시하고 자격 증명 모음 표현식의 키를 사용합니다.

REALM_UNDERSCORE_KEY

Red Hat Single Sign-On은 밑줄 문자를 사용하여 영역과 키를 결합합니다. Red Hat Single Sign-On은 다른 밑줄 문자와 함께 영역이나 키에서 밑줄을 이스케이프합니다. 예를 들어 영역을 master_realm 이라고 하고 키가 smtp_key 인 경우 결합된 키는 master__realm_smtp__key 입니다.

REALM_FILESEPARATOR_KEY

Red Hat Single Sign-On은 플랫폼 파일 구분 문자를 사용하여 영역과 키를 결합합니다.

기본 제공 공급자에 대한 해결 프로그램을 구성하지 않은 경우 Red Hat Single Sign-On은 REALM_UNDERSCORE_KEY 를 선택합니다.

13.4. 샘플 설정

다음은 자격 증명 모음 및 인증 정보 저장소 구성의 예입니다. 절차는 두 부분으로 나뉩니다:

  • 자격 증명 저장소와 자격 증명 모음 저장소 및 자격 증명 모음 생성은 일반 텍스트입니다.
  • 암호가 elytron-tool.sh 가 제공하는 마스크를 사용하도록 자격 증명 저장소 및 자격 증명 모음 업데이트 .

이 예에서 사용된 테스트 대상은 BIND DN 인증 정보가 있는 LDAP 인스턴스 secret12 입니다. 대상은 영역 ldaptest 에서 사용자 페더레이션을 사용하여 매핑됩니다.

13.4.1. 마스크 없이 인증 정보 저장소 및 자격 증명 모음 구성

인증 정보 저장소 및 자격 증명 모음 암호가 일반 텍스트인 자격 증명 모음을 생성합니다.

사전 요구 사항

  • 실행 중인 LDAP 인스턴스에는 BIND DN 인증 정보 secret12 가 있습니다.
  • 별칭은 기본 키 확인자를 사용할 때 <realm-name>_< key-value> 형식을 사용합니다. 이 경우 인스턴스가 ldaptest 영역에서 실행되고 있고 ldaptest _ldap_secret 은 해당 영역의 ldap_secret 값에 해당하는 별칭입니다.
참고

확인자는 영역 및 키 이름에서 밑줄 문자를 두 번 밑줄 문자로 바꿉니다. 예를 들어 키 ldaptest_ldap_secret 의 경우 최종 키는 ldaptest_ldap__secret 입니다.

절차

  1. Elytron 인증 정보 저장소를 생성합니다.

    [standalone@localhost:9990 /] /subsystem=elytron/credential-store=test-store:add(create=true, location=/home/test/test-store.p12, credential-reference={clear-text=testpwd1!},implementation-properties={keyStoreType=PKCS12})
  2. 인증 정보 저장소에 별칭을 추가합니다.

    /subsystem=elytron/credential-store=test-store:add-alias(alias=ldaptest_ldap__secret,secret-value=secret12)

    확인기에서 ldaptest_ldap__secret 키로 이중 밑줄을 사용하는 방법을 확인합니다.

  3. 인증 정보 저장소의 별칭을 나열하여 Elytron에서 생성하는 키 저장소의 콘텐츠를 검사합니다.

    keytool -list -keystore /home/test/test-store.p12 -storetype PKCS12 -storepass testpwd1!
    Keystore type: PKCS12
    Keystore provider: SUN
    
    Your keystore contains 1 entries
    
    ldaptest_ldap__secret/passwordcredential/clear/, Oct 12, 2020, SecretKeyEntry,
  4. Red Hat Single Sign-On에서 자격 증명 모음 SPI 구성.

    /subsystem=keycloak-server/spi=vault:add(default-provider=elytron-cs-keystore)
    
    /subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:add(enabled=true, properties={location=>/home/test/test-store.p12, secret=>testpwd1!, keyStoreType=>PKCS12})

    이 시점에서 자격 증명 모음 및 자격 증명 저장소 암호는 마스킹되지 않습니다.

            <spi name="vault">
                    <default-provider>elytron-cs-keystore</default-provider>
                    <provider name="elytron-cs-keystore" enabled="true">
                        <properties>
                            <property name="location" value="/home/test/test-store.p12"/>
                            <property name="secret" value="testpwd1!"/>
                            <property name="keyStoreType" value="PKCS12"/>
                        </properties>
                    </provider>
                </spi>
    
             <credential-stores>
                    <credential-store name="test-store" location="/home/test/test-store.p12" create="true">
                        <implementation-properties>
                            <property name="keyStoreType" value="PKCS12"/>
                        </implementation-properties>
                        <credential-reference clear-text="testpwd1!"/>
                    </credential-store>
             </credential-stores>
  5. LDAP 공급자에서 binDN 인증 정보를 ${vault.ldap_secret} 로 바꿉니다.
  6. LDAP 연결을 테스트합니다.

    LDAP Vault

    LDAP Vault

13.4.2. 자격 증명 저장소 및 자격 증명 모음의 암호 마스킹

elytron-tool.sh 에서 제공하는 마스크를 사용하는 암호를 갖도록 인증 정보 저장소 및 자격 증명 모음을 업데이트할 수 있습니다.

  1. slave 및 iteration 매개변수 값을 사용하여 마스킹된 암호를 생성합니다.

    $ EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD

    예를 들면 다음과 같습니다.

    elytron-tool.sh mask --salt 12345678 --iteration 123 --secret testpwd1!
    MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123
  2. 마스킹된 암호를 사용하도록 Elytron 인증 정보 저장소 구성을 업데이트합니다.

    /subsystem=elytron/credential-store=cs-store:write-attribute(name=credential-reference.clear-text,value="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123")
  3. 마스킹된 암호를 사용하도록 Red Hat Single Sign-On 자격 증명 모음 구성을 업데이트합니다.

    /subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:remove()
    /subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:add(enabled=true, properties={location=>/home/test/test-store.p12, secret=>”MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123”, keyStoreType=>PKCS12})

    이제 자격 증명 모음 및 인증 정보 저장소가 마스킹됩니다.

            <spi name="vault">
                    <default-provider>elytron-cs-keystore</default-provider>
                    <provider name="elytron-cs-keystore" enabled="true">
                        <properties>
                            <property name="location" value="/home/test/test-store.p12"/>
                            <property name="secret" value="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123"/>
                            <property name="keyStoreType" value="PKCS12"/>
                        </properties>
                    </provider>
                </spi>
             ....
             .....
             <credential-stores>
                    <credential-store name="test-store" location="/home/test/test-store.p12" create="true">
                        <implementation-properties>
                            <property name="keyStoreType" value="PKCS12"/>
                        </implementation-properties>
                        <credential-reference clear-text="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123"/>
                    </credential-store>
             </credential-stores>
  4. ${vault.ldap_secret} 을 사용하여 LDAP에 대한 연결을 테스트할 수 있습니다.

추가 리소스

Elytron 툴에 대한 자세한 내용은 Using Credential Stores with Elytron Client 를 참조하십시오.

14장. 이벤트 추적을 위한 감사 구성

Red Hat Single Sign-On에는 감사 기능이 포함되어 있습니다. 모든 로그인 및 관리자 작업을 기록하고 관리 콘솔에서 해당 작업을 검토할 수 있습니다. Red Hat Single Sign-On에는 이벤트를 수신하고 작업을 트리거할 수 있는 Listener SPI도 포함되어 있습니다. 기본 제공 리스너의 예로는 로그 파일 및 이벤트가 발생하는 경우 이메일을 보냅니다.

14.1. 로그인 이벤트

사용자에게 영향을 미치는 모든 이벤트를 기록하고 볼 수 있습니다. Red Hat Single Sign-On은 성공적인 사용자 로그인, 잘못된 암호를 입력하는 사용자 또는 사용자 계정 업데이트와 같은 작업에 대한 로그인 이벤트를 트리거합니다. 기본적으로 Red Hat Single Sign-On은 관리 콘솔에 이벤트를 저장하거나 표시하지 않습니다. 오류 이벤트만 Admin Console 및 서버의 로그 파일에 기록됩니다.

이벤트 저장을 시작하려면 스토리지를 활성화합니다.

절차

  1. 메뉴에서 이벤트를 클릭합니다.
  2. 구성 탭을 클릭합니다.

    이벤트 설정

    Event Configuration

  3. Save EventsON 으로 전환합니다.

    이벤트 저장

    Save Events

  4. 저장 유형 필드에 저장할 이벤트를 지정합니다.

이벤트 지우기 버튼을 클릭하여 모든 이벤트를 삭제할 수 있습니다.

Expiration 필드에 이벤트를 저장할 시간을 지정합니다. 로그인 이벤트 스토리지를 활성화하고 설정을 활성화하면 저장 버튼을 클릭합니다.

로그인 이벤트 탭을 클릭하여 이벤트를 확인합니다.

로그인 이벤트

Login Events

필터 버튼을 사용하여 이벤트를 필터링할 수 있습니다.

로그인 이벤트 필터

Login Events Filter

이 예제에서는 로그인 이벤트만 필터링합니다. 업데이트를 클릭하여 필터를 실행합니다.

14.1.1. 이벤트 유형

로그인 이벤트:

이벤트설명

login

사용자가 로그인합니다.

등록하기

사용자가 등록합니다.

logout

사용자가 로그아웃합니다.

토큰 코드

애플리케이션 또는 클라이언트: 토큰에 대한 코드를 교환합니다.

토큰 새로 고침

애플리케이션 또는 클라이언트가 토큰을 새로 고칩니다.

계정 이벤트:

이벤트설명

소셜 링크

사용자 계정은 소셜 미디어 공급자에 연결됩니다.

social Link 삭제

소셜 미디어 계정에서 사용자 계정 서버로의 링크입니다.

이메일 업데이트

계정의 이메일 주소가 변경됩니다.

프로필 업데이트

계정 변경에 대한 프로필입니다.

암호 재설정 보내기

Red Hat Single Sign-On은 암호 재설정 이메일을 보냅니다.

암호 업데이트

계정의 암호가 변경됩니다.

TOTP 업데이트

계정에 대한 시간 기반 TOTP(한시 암호) 설정이 변경됩니다.

TOTP 제거

Red Hat Single Sign-On은 계정에서 TOTP를 제거합니다.

확인 이메일 보내기

Red Hat Single Sign-On은 이메일 확인 이메일을 보냅니다.

이메일 확인

Red Hat Single Sign-On은 계정의 이메일 주소를 확인합니다.

각 이벤트에는 해당 오류 이벤트가 있습니다.

14.1.2. 이벤트 리스너

이벤트 리스너는 이벤트를 수신하고 해당 이벤트를 기반으로 작업을 수행합니다. Red Hat Single Sign-On에는 두 개의 기본 제공 리스너인 Logging Event Listener 및 Email Event Listener가 포함되어 있습니다.

14.1.2.1. 로깅 이벤트 리스너

로깅 이벤트 리스너가 활성화되면 이 리스너는 오류 이벤트가 발생할 때 로그 파일에 씁니다.

로깅 이벤트 Listener의 예제 로그 메시지:

11:36:09,965 WARN  [org.keycloak.events] (default task-51) type=LOGIN_ERROR, realmId=master,
                    clientId=myapp,
                    userId=19aeb848-96fc-44f6-b0a3-59a17570d374, ipAddress=127.0.0.1,
                    error=invalid_user_credentials, auth_method=openid-connect, auth_type=code,
                    redirect_uri=http://localhost:8180/myapp,
                    code_id=b669da14-cdbb-41d0-b055-0810a0334607, username=admin

로깅 이벤트 리스너를 사용하여 손상된 봇 공격으로부터 보호할 수 있습니다.

  1. LOGIN_ERROR 이벤트에 대한 로그 파일을 구문 분석합니다.
  2. 실패한 로그인 이벤트의 IP 주소를 추출합니다.
  3. IP 주소를 침입 방지 소프트웨어 프레임워크 도구로 보냅니다.

로깅 이벤트 Listener는 org.keycloak.events 로그 카테고리에 이벤트를 기록합니다. Red Hat Single Sign-On에는 기본적으로 서버 로그에 디버그 로그 이벤트가 포함되어 있지 않습니다.

서버 로그에 디버그 로그 이벤트를 포함하려면 다음을 수행합니다.

  1. standalone.xml 파일을 편집합니다.
  2. 로깅 이벤트 리스너에서 사용하는 로그 수준을 변경합니다.

또는 org.keycloak.events 에 대한 로그 수준을 구성할 수 있습니다.

예를 들어 로그 수준을 변경하려면 다음을 추가합니다.

<subsystem xmlns="urn:jboss:domain:logging:...">
    ...
    <logger category="org.keycloak.events">
        <level name="DEBUG"/>
    </logger>
</subsystem>

로깅 이벤트 리스너에서 사용하는 로그 수준을 변경하려면 다음을 추가합니다.

<subsystem xmlns="urn:jboss:domain:keycloak-server:...">
    ...
    <spi name="eventsListener">
      <provider name="jboss-logging" enabled="true">
        <properties>
          <property name="success-level" value="info"/>
          <property name="error-level" value="error"/>
        </properties>
      </provider>
    </spi>
</subsystem>

로그 수준에 유효한 값은 debug,info,warn,error, fatal 입니다.

14.1.2.2. Email Event Listener

이벤트가 발생하고 다음 이벤트를 지원하는 경우 Email Event Listener는 사용자 계정으로 이메일을 보냅니다.

  • 로그인 오류.
  • 암호 업데이트.
  • 시간 기반 TOTP(한시 암호)를 업데이트합니다.
  • 시간 기반 TOTP(한시 암호)를 제거합니다.

절차

Email Listener를 활성화하려면 다음을 수행합니다.

  1. 메뉴에서 이벤트를 클릭합니다.
  2. 구성 탭을 클릭합니다.
  3. 이벤트 청취자 필드를 클릭합니다.
  4. 이메일 선택 .

배포에 포함된 standalone.xml,standalone-ha.xml 또는 domain.xml 구성 파일을 편집하여 이벤트를 제외할 수 있습니다. 예를 들면 다음과 같습니다.

<spi name="eventsListener">
  <provider name="email" enabled="true">
    <properties>
      <property name="exclude-events" value="[&quot;UPDATE_TOTP&quot;,&quot;REMOVE_TOTP&quot;]"/>
    </properties>
  </provider>
</spi>

standalone.xml,standalone-ha.xml 또는 domain.xml 구성 파일을 편집하여 데이터베이스에서 이벤트 세부 정보의 최대 길이를 설정할 수 있습니다. 이 설정은 필드(예: redirect_uri)가 긴 경우 유용합니다. 예를 들면 다음과 같습니다.

<spi name="eventsStore">
    <provider name="jpa" enabled="true">
        <properties>
            <property name="max-detail-length" value="1000"/>
        </properties>
    </provider>
</spi>

standalone.xml,standalone-ha.xml, domain.xml 파일의 위치에 대한 자세한 내용은 서버 설치 및 구성 가이드를 참조하십시오.

14.2. 관리자 이벤트

관리자 콘솔에서 관리자가 수행하는 모든 작업을 기록할 수 있습니다. 관리 콘솔은 Red Hat Single Sign-On REST 인터페이스 및 Red Hat Single Sign-On 감사를 호출하여 관리 작업을 수행합니다. 관리 콘솔에서 결과 이벤트를 볼 수 있습니다.

관리자 작업 감사를 활성화하려면 다음을 수행합니다.

절차

  1. 메뉴에서 이벤트를 클릭합니다.
  2. 구성 탭을 클릭합니다.

    이벤트 구성

    Event Configuration

  3. 관리 이벤트 설정 섹션에서 Save Events to ON 을 설정합니다. Red Hat Single Sign-On에는 포함 표시 스위치가 표시됩니다.

    관리자 이벤트 구성

    Admin Event Configuration

  4. 토글 포함 을 ON 으로 설정합니다.

포함식 전환 에는 관리자 작업을 볼 수 있도록 관리 REST API를 통해 전송된 JSON 문서가 포함되어 있습니다. 저장된 작업의 데이터베이스를 지우려면 admin 이벤트 지우기 를 클릭합니다.

관리자 이벤트를 보려면 Admin Events 탭을 클릭합니다.

관리자 이벤트

Admin Events

세부 정보 열에 표시 버튼이 있는 경우 표시 버튼을 클릭하여 작업과 함께 전송된 JSON Red Hat Single Sign-On을 확인합니다.

관리자 표현

Admin Representation

필터를 클릭하여 특정 이벤트를 확인합니다.

admin 이벤트 필터

Admin Event Filter

15장. 데이터베이스 가져오기 및 내보내기

Red Hat Single Sign-On에는 전체 데이터베이스를 내보내고 가져올 수 있는 기능이 포함되어 있습니다.

전체 Red Hat Single Sign-On 데이터베이스를 한 환경에서 다른 환경으로 마이그레이션하거나 다른 데이터베이스로 마이그레이션할 수 있습니다. 서버 부팅 시 내보내기/가져오기 트리거되고 해당 매개 변수는 Java 속성을 통과합니다.

참고

서버를 시작할 때 트리거를 가져오고 내보내기 때문에 내보내기/가져오기 동안 서버 또는 데이터베이스에 대한 작업을 수행하지 않습니다.

데이터베이스를 다음과 같이 내보내거나 가져올 수 있습니다.

  • 파일 시스템의 디렉터리입니다.
  • 파일 시스템에 단일 JSON 파일

디렉터리에서 가져올 때 파일 이름은 다음 이름 지정 규칙을 따라야 합니다.

  • <REALM_NAME>-realm.json. 예를 들어 "acme-roadrunner-affairs-affairs"라는 영역에 대한 "acme-roadrunner-affairs-realm.json"입니다.
  • <REALM_NAME>-users-<INDEX>.json. 예를 들어 "acme-roadrunner-affairs-affairs" 영역의 첫 번째 사용자의 파일인 "acme-roadrunner-affairs"의 "acme-roadrunner-affair"입니다.

디렉터리로 내보내는 경우 각 JSON 파일에 저장된 사용자 수를 지정할 수 있습니다.

참고

단일 파일로 내보내면 대용량 파일이 생성될 수 있으므로 데이터베이스에 500명 이상의 사용자가 포함된 경우 단일 파일이 아닌 디렉터리로 내보냅니다. 많은 사용자를 디렉터리로 내보내는 것은 디렉터리 공급자가 각 "페이지"(사용자 파일)에 대해 별도의 트랜잭션을 사용하므로 최적으로 수행됩니다.

파일 및 트랜잭션당 기본 사용자 수는 50개이지만 이 수는 재정의할 수 있습니다. 자세한 내용은 keycloak.migration.usersPerFile 을 참조하십시오.

단일 파일로 내보내거나 가져오기는 하나의 트랜잭션을 사용하며, 데이터베이스에 여러 사용자가 포함된 경우 성능이 저하될 수 있습니다.

암호화되지 않은 디렉터리로 내보내려면 다음을 수행합니다.

bin/standalone.sh -Dkeycloak.migration.action=export
-Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=<DIR TO EXPORT TO>

단일 JSON 파일로 내보내려면 다음을 수행합니다.

bin/standalone.sh -Dkeycloak.migration.action=export
-Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO EXPORT TO>

마찬가지로 내보내기 대신 -Dkeycloak.migration.action=import 를 사용하십시오. 예를 들면 다음과 같습니다.

bin/standalone.sh -Dkeycloak.migration.action=import
-Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO IMPORT>
-Dkeycloak.migration.strategy=OVERWRITE_EXISTING

기타 명령 줄 옵션은 다음과 같습니다.

-Dkeycloak.migration.realmName
이 속성을 사용하여 특별히 이름이 지정된 영역을 내보냅니다. 이 매개 변수를 지정하지 않으면 모든 영역 내보내기가 포함됩니다.
-Dkeycloak.migration.usersExportStrategy

이 속성은 사용자가 로 내보낼 위치를 지정합니다. 가능한 값은 다음과 같습니다.

  • DIFFERENT_FILES - 사용자가 파일 당 최대 사용자 수에 따라 다른 파일로 내보낼 수 있습니다. DIFFERENT_FILES는 이 속성의 기본값입니다.
  • SKIP - Red Hat Single Sign-On은 사용자 내보내기를 건너뜁니다.
  • realM_FILE - 사용자는 영역 설정을 사용하여 동일한 파일로 내보냅니다. 이 파일은 영역 데이터 및 사용자의 "foo-realm.json"과 유사합니다.
  • users export to the same file but different from the realm file. 결과는 영역 데이터를 사용하는 "foo-realm.json", 사용자와 "foo-users.json"과 유사합니다.
-Dkeycloak.migration.usersPerFile
이 속성은 파일 및 데이터베이스 트랜잭션당 사용자 수를 지정합니다. 기본적으로 이 값은 50입니다. Red Hat Single Sign-On은 keycloak.migration.usersExportStrategy가 DIFFERENT_FILES인 경우 이 속성을 사용합니다.
-Dkeycloak.migration.strategy
Red Hat Single Sign-On은 가져올 때 이 속성을 사용합니다. 동일한 이름의 영역이 이미 데이터베이스에 있을 때 진행되는 방법을 지정합니다.

가능한 값은 다음과 같습니다.

  • IGNORE_EXISTING - 동일한 이름의 영역이 이미 존재하는 경우 영역을 가져오지 마십시오.
  • OVERWRITE_EXISTING - 기존 영역을 제거하고 JSON 파일에서 새 데이터로 영역을 다시 가져옵니다. 이 값을 사용하여 한 환경에서 다른 환경으로 완전히 마이그레이션합니다.

Red Hat Single Sign-On 내보내기에 없는 파일을 가져오는 경우 keycloak.import 옵션을 사용합니다. 둘 이상의 영역 파일을 가져오는 경우 쉼표로 구분된 파일 이름 목록을 지정합니다. Red Hat Single Sign-On이 마스터 영역을 초기화한 후 발생하므로 파일 이름 목록이 이전 사례보다 더 적합합니다.

예:

  • -Dkeycloak.import=/tmp/realm1.json
  • -Dkeycloak.import=/tmp/realm1.json,/tmp/realm2.json
참고

keycloak.import 매개변수는 keycloak.migration.X 매개변수와 함께 사용할 수 없습니다. 이러한 매개변수를 함께 사용하는 경우 Red Hat Single Sign-On은 keycloak.import 매개변수를 무시합니다. keycloak.import 메커니즘은 Red Hat Single Sign-On에 이미 존재하는 영역을 무시합니다. keycloak.import 메커니즘은 개발 목적으로 편리합니다. 그러나 더 많은 유연성이 필요한 경우 keycloak.migration.X 매개변수를 사용합니다.

15.1. 관리자 콘솔 내보내기/가져오기

Red Hat Single Sign-On은 관리 콘솔에서 대부분의 리소스를 가져오고 대부분의 리소스를 내보냅니다. Red Hat Single Sign-On은 사용자 내보내기를 지원하지 않습니다.

참고

Red Hat Single Sign-On은 내보내기 파일의 시크릿 또는 개인 정보가 포함된 속성을 마스크합니다. Admin Console의 파일 내보내기는 서버 간 백업 또는 데이터 전송에 적합하지 않습니다. 부팅 시간 내보내기만 서버 간의 백업 또는 데이터 전송에 적합합니다.

내보내기 중에 생성된 파일을 사용하여 관리 콘솔에서 가져올 수 있습니다. 한 영역에서 내보내고 다른 영역으로 가져오거나 한 서버에서 다른 영역으로 내보낼 수 있습니다.

참고

관리 콘솔 내보내기/import는 파일당 하나의 영역만 허용합니다.

주의

관리 콘솔 가져오기에서 리소스를 덮어쓸 수 있습니다. 특히 프로덕션 서버에서는 이 기능을 주의해서 사용하십시오. Admin Console Export 작업의 JSON 파일은 시크릿에 잘못된 값이 포함되어 있기 때문에 데이터 가져오기에 적합하지 않습니다.

주의

관리 콘솔을 사용하여 클라이언트, 그룹 및 역할을 내보낼 수 있습니다. 해당 영역의 데이터베이스에 많은 클라이언트, 그룹 및 역할이 포함된 경우 내보내기에 완료하는 데 시간이 오래 걸릴 수 있으며 Red Hat Single Sign-On 서버에서 사용자 요청에 응답하지 않을 수 있습니다. 특히 프로덕션 서버에서는 이 기능을 주의해서 사용하십시오.

16장. 보안 위협 완화

보안 취약점은 모든 인증 서버에 존재합니다. 자세한 내용은 IETF(Internet Engineering Task Force) OAuth 2.0 위협 모델OAuth 2.0 보안 모범 사례에서 참조하십시오.

16.1. 호스트

Red Hat Single Sign-On은 토큰 발행자 필드 및 암호 재설정 이메일의 URL과 같은 여러 가지 방법으로 공개 호스트 이름을 사용합니다.

기본적으로 호스트 이름은 요청 헤더에서 파생됩니다. 호스트 이름이 유효한지 확인하는 검증이 없습니다. 로드 밸런서 또는 프록시를 사용하지 않는 경우 Red Hat Single Sign-On을 사용하여 잘못된 호스트 헤더를 방지하고 허용 가능한 호스트 이름을 구성합니다.

호스트 이름의 SPI(Service Provider Interface)는 요청에 대한 호스트 이름을 구성하는 방법을 제공합니다. 이 기본 제공 공급자를 사용하여 요청 URI를 기반으로 백엔드 요청을 허용하는 동안 프런트 엔드 요청에 대한 고정 URL을 설정할 수 있습니다. 기본 제공 공급자에 필요한 기능이 없는 경우 사용자 지정 공급자를 개발할 수 있습니다.

16.2. 관리자 엔드포인트 및 관리 콘솔

Red Hat Single Sign-On에서는 기본적으로 관리 이외의 사용과 동일한 포트의 관리 REST API 및 웹 콘솔을 노출합니다. 외부 액세스가 필요하지 않은 경우 관리 끝점을 외부에 노출하지 마십시오. 관리 끝점을 외부에 노출해야 하는 경우 Red Hat Single Sign-On에 직접 노출하거나 프록시를 사용할 수 있습니다.

프록시를 사용하여 끝점을 노출하려면 프록시 설명서를 참조하십시오. /auth/admin 엔드포인트에 대한 요청에 대한 액세스를 제어해야 합니다.

Red Hat Single Sign-On에서는 두 가지 옵션을 사용하여 엔드포인트를 직접 노출할 수 있습니다. IP 제한 및 별도의 포트입니다.

Red Hat Single Sign-On의 프런트 엔드 URL에서 관리자 콘솔에 액세스할 수 없는 경우 기본 호스트 이름 공급자에 고정 관리자 URL을 구성합니다.

16.2.1. IP 제한

/auth/admin 에 대한 액세스를 특정 IP 주소로만 제한할 수 있습니다. 예를 들어 /auth/admin 에 대한 액세스를 10.0.0.1 범위의 IP 주소로 10.0.0.255 로 제한합니다.

<subsystem xmlns="urn:jboss:domain:undertow:12.0">
    ...
    <server name="default-server">
        ...
        <host name="default-host" alias="localhost">
            ...
            <filter-ref name="ipAccess"/>
        </host>
    </server>
    <filters>
        <expression-filter name="ipAccess" expression="path-prefix('/auth/admin') -> ip-access-control(acl={'10.0.0.0/24 allow'})"/>
    </filters>
    ...
</subsystem>

다음 CLI 명령을 사용하여 특정 IP 주소에 대한 액세스를 제한할 수도 있습니다.

/subsystem=undertow/configuration=filter/expression-filter=ipAccess:add(,expression="path-prefix[/auth/admin] -> ip-access-control(acl={'10.0.0.0/24 allow'})")
/subsystem=undertow/server=default-server/host=default-host/filter-ref=ipAccess:add()
참고

프록시를 사용한 IP 제한의 경우 Red Hat Single Sign-On이 프록시 IP 주소가 아닌 클라이언트 IP 주소를 수신하도록 프록시를 구성합니다.

16.2.2. 포트 제한

/auth/admin 을 노출되지 않은 다른 포트에 노출할 수 있습니다. 예를 들어 포트 8444/auth/admin 을 노출하고 기본 포트 8443 에 대한 액세스를 방지합니다.

<subsystem xmlns="urn:jboss:domain:undertow:12.0">
    ...
    <server name="default-server">
        ...
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <https-listener name="https-admin" socket-binding="https-admin" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            ...
            <filter-ref name="portAccess"/>
        </host>
    </server>
    <filters>
        <expression-filter name="portAccess" expression="path-prefix('/auth/admin') and not equals(%p, 8444) -> response-code(403)"/>
    </filters>
    ...
</subsystem>

...

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    ...
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="https-admin" port="${jboss.https.port:8444}"/>
    ...
</socket-binding-group>

포트 8444/auth/admin 을 노출하고 CLI 명령을 사용하여 기본 포트 8443 에 대한 액세스를 차단할 수 있습니다.

/socket-binding-group=standard-sockets/socket-binding=https-admin/:add(port=8444)

/subsystem=undertow/server=default-server/https-listener=https-admin:add(socket-binding=https-admin, security-realm=ApplicationRealm, enable-http2=true)

/subsystem=undertow/configuration=filter/expression-filter=portAccess:add(,expression="path-prefix('/auth/admin') and not equals(%p, 8444) -> response-code(403)")
/subsystem=undertow/server=default-server/host=default-host/filter-ref=portAccess:add()

16.3. 무차별 공격

무차별 공격에서는 여러 번 로그인을 시도하여 사용자의 암호를 추측하려고 시도합니다. Red Hat Single Sign-On에는 무차별 탐지 기능이 있으며 로그인 실패 횟수가 지정된 임계값을 초과하는 경우 사용자 계정을 일시적으로 비활성화할 수 있습니다.

참고

Red Hat Single Sign-On은 기본적으로 무차별 탐지를 비활성화합니다. 이 기능을 사용하여 무차별 공격으로부터 보호하십시오.

절차

이 보호를 사용하려면 다음을 수행하십시오.

  1. 메뉴에서 CloudEvent Settings 을 클릭합니다.
  2. 보안 탭을 클릭합니다.
  3. Brute Force Detection 탭을 클릭합니다.

    brute force detection

    brute force

Red Hat Single Sign-On은 공격을 탐지할 때 영구 잠금 해제 및 임시 잠금 작업을 배포할 수 있습니다. 영구 잠금은 관리자가 다시 활성화할 때까지 사용자 계정을 비활성화합니다. 임시 잠금은 특정 기간 동안 사용자 계정을 비활성화합니다. 공격이 계속됨에 따라 계정이 비활성화되는 기간입니다.

참고

사용자가 일시적으로 잠기고 로그인을 시도하면 Red Hat Single Sign-On에 기본 사용자 이름 또는 암호 오류 메시지가 표시됩니다. 이 메시지는 잘못된 사용자 이름 또는 잘못된 암호에 대해 표시된 메시지와 동일한 오류 메시지로, 공격자가 계정이 비활성화되지 않도록 합니다.

공통 매개변수

이름설명Default

최대 로그인 실패 수

최대 로그인 실패 수입니다.

30 실패.

빠른 로그인 확인 pooliseconds

로그인 시도 사이의 최소 시간입니다.

1000밀리초.

최소 빠른 로그인 대기

로그인 시도 시 사용자를 사용하지 않도록 설정하는 최소 시간은 빠른 로그인 검사 검사보다 빠릅니다.

1분.

영구 잠금 흐름

  1. 로그인 성공 시

    1. 재설정
  2. 로그인 실패 시

    1. 증가
    2. 최대 로그인 실패 보다 큰 경우

      1. 사용자 영구 비활성화
    3. 이 실패와 마지막 실패 사이의 시간이 빠른 로그인 검사mbiseconds보다 작은 경우

      1. 최소 빠른 로그인 대기의 사용자를 일시적으로 비활성화

Red Hat Single Sign-On이 사용자를 비활성화하면 관리자가 사용자를 활성화할 때까지 로그인할 수 없습니다. 계정을 활성화하면 개수 가 재설정됩니다.

임시 잠금 매개변수

이름설명Default

업그레이드 대기

사용자 로그인 시도가 Max Login Failure를 초과하면 사용자가 일시적으로 비활성화되는 시간에 추가된 시간입니다.

1분.

최대 대기

사용자가 일시적으로 비활성화되는 최대 시간입니다.

15분.

실패 재설정 시간

실패 횟수가 재설정되는 시간입니다. 타이머는 마지막으로 실패한 로그인에서 실행됩니다.

12시간.

임시 잠금 알고리즘

  1. 로그인 성공 시

    1. 재설정
  2. 로그인 실패 시

    1. 이 실패와 마지막 실패 사이의 시간이 실패 재설정시간보다 큰 경우

      1. 재설정
    2. 증가
    3. Wait Increment * ( 최대 로그인 실패 )를 사용하여 대기 시간을 계산합니다. 이 분할은 정수로 반올림된 정수 분할입니다.
    4. 대기 시간이 0이고 이 실패 사이의 시간이 빠른 로그인 검사 검사 보다 작으면 대기 시간을 Minimum Quick Login Wait 로 설정합니다.

      1. 대기 시간 단축 및 최대 대기 초 동안 사용자를 일시적으로 비활성화

임시로 비활성화된 계정이 로그인 실패를 커밋하면 'count'가 증가하지 않습니다.

Red Hat Single Sign-On 무차별 탐지의 단점은 서버가 서비스 거부 공격에 취약해질 수 있다는 점입니다. 서비스 거부 공격을 구현할 때 공격자는 알고 있는 계정의 암호를 추측하여 로그인할 수 있으며 결국 Red Hat Single Sign-On이 계정을 비활성화하도록 할 수 있습니다.

침입 방지 소프트웨어 (IPS)를 사용하는 것이 좋습니다. Red Hat Single Sign-On은 모든 로그인 실패 및 클라이언트 IP 주소 오류를 기록합니다. IPS를 Red Hat Single Sign-On 서버의 로그 파일을 가리킬 수 있으며 IPS는 이러한 IP 주소의 연결을 차단하도록 방화벽을 수정할 수 있습니다.

16.3.1. 암호 정책

사용자가 복잡한 암호를 선택하도록 하는 복잡한 암호 정책이 있는지 확인합니다. 자세한 내용은 암호 정책 장을 참조하십시오. 일회성 암호를 사용하도록 Red Hat Single Sign-On 서버를 설정하여 암호 추측 방지.

16.4. 읽기 전용 사용자 속성

Red Hat Single Sign-On에 저장된 일반 사용자에게는 사용자 프로필과 관련된 다양한 속성이 있습니다. 이러한 속성에는 email, firstName 또는 lastName이 포함됩니다. 그러나 사용자에게는 일반적인 프로필 데이터가 아닌 메타데이터가 아닌 속성이 있을 수도 있습니다. 메타데이터 속성은 일반적으로 사용자에게 읽기 전용이어야 하며 일반적인 사용자는 Red Hat Single Sign-On 사용자 인터페이스 또는 계정 REST API에서 해당 속성을 업데이트할 수 없습니다. Admin REST API로 사용자를 생성하거나 업데이트할 때 일부 속성은 관리자에 대해 읽기 전용이어야 합니다.

메타데이터 속성은 일반적으로 해당 그룹의 속성입니다.

  • 사용자 스토리지 공급자와 관련된 다양한 링크 또는 메타데이터입니다. 예를 들어 LDAP 통합의 경우 LDAP_ID 속성에는 LDAP 서버에 있는 사용자 ID가 포함됩니다.
  • 사용자 스토리지가 프로비저닝한 메타데이터입니다. 예를 들어, LDAP에서 프로비저닝된 createdTimestamp 는 항상 사용자 또는 관리자에 의해 읽기 전용이어야 합니다.
  • 다양한 인증 정보와 관련된 메타데이터입니다. 예를 들어 KERBEROS_PRINCIPAL 속성은 특정 사용자의 kerberos 기본 이름을 포함할 수 있습니다. 마찬가지로 속성 usercertificate 에는 X.509 인증서의 데이터로 사용자를 바인딩하는 것과 관련된 메타데이터가 포함될 수 있으며 일반적으로 X.509 인증서 인증이 활성화될 때 사용됩니다.
  • 애플리케이션/클라이언트의 사용자 식별기와 관련된 메타데이터입니다. 예를 들어 saml.persistent.name.for.my_app 에는 SAML NameID를 포함할 수 있습니다. 이 ID는 클라이언트 애플리케이션 my_app 에서 사용자 식별자로 사용합니다.
  • 속성 기반 액세스 제어(ABAC)에 사용되는 권한 부여 정책과 관련된 메타데이터입니다. 이러한 속성의 값은 권한 부여 결정에 사용될 수 있습니다. 따라서 이러한 속성을 사용자가 업데이트할 수 없는 것이 중요합니다.

장기적인 관점에서 Red Hat Single Sign-On에는 적절한 User Profile SPI가 있어 모든 사용자 속성을 세밀하게 구성할 수 있습니다. 현재 이 기능은 아직 완전히 제공되지 않습니다. 따라서 Red Hat Single Sign-On에는 사용자를 위한 읽기 전용 및 서버 수준에서 구성된 관리자에게 읽기 전용인 내부 사용자 속성 목록이 있습니다.

이는 Red Hat Single Sign-On 기본 공급자 및 기능에서 내부적으로 사용되는 읽기 전용 속성 목록입니다. 따라서 항상 읽기 전용입니다.

  • 사용자: KERBEROS_PRINCIPAL,LDAP_ID,LDAP_ENTRY_DN,CREATED_TIMESTAMP,createTimestamp ,userCertificate,saml.persistent.name.for.*, ENABLED,EMAIL_VERIFIED
  • 관리자: KERBEROS_PRINCIPAL,LDAP_ID,LDAP_ENTRY_DN,CREATED_TIMESTAMP,createTimestamp,modifyTimestamp

시스템 관리자는 이 목록에 속성을 추가할 수 있습니다. 이 구성은 현재 서버 수준에서 사용할 수 있습니다.

독립 실행형(-*).xml 파일에 이 구성을 Red Hat Single Sign-On 서버 하위 시스템의 구성에 추가할 수 있습니다.

<spi name="userProfile">
    <provider name="legacy-user-profile" enabled="true">
        <properties>
            <property name="read-only-attributes" value="[&quot;foo&quot;,&quot;bar*&quot;]"/>
            <property name="admin-read-only-attributes" value="[&quot;foo&quot;]"/>
        </properties>
    </provider>
</spi>

다음과 같은 명령을 사용하여 JBoss CLI를 사용하여 구성할 수 있습니다.

/subsystem=keycloak-server/spi=userProfile/:add
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:add(properties={},enabled=true)
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=read-only-attributes,value=[foo,bar*])
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=admin-read-only-attributes,value=[foo])

이 예에서는 사용자와 관리자는 foo 특성을 업데이트할 수 없습니다. 사용자는 바로 시작하는 속성을 편집할 수 없습니다. 예를 들어 또는 장벽이 있습니다. 구성은 대/소문자를 구분하지 않으므로 이 예에서는 FOO 또는 BarRier 와 같은 속성도 거부됩니다. 와일드카드 문자 * 는 특성 이름의 마지막에만 지원되므로 관리자는 지정된 문자로 시작하는 모든 속성을 효과적으로 거부할 수 있습니다. 속성 중간에 있는 * 는 일반 문자로 간주됩니다.

16.5. Clickjacking

Clickjacking은 사용자를 사용자가 인지하는 것과 다른 사용자 인터페이스 요소를 클릭하도록 유도하는 기술입니다. 악의적인 사이트에서는 대상 사이트의 중요한 버튼 아래에 직접 배치된 더미 버튼 위에 있는 투명한 iECDHE, overlaid로 대상 사이트를 로드합니다. 사용자가 표시 버튼을 클릭하면 숨겨진 페이지에서 버튼을 클릭합니다. 공격자는 이 방법을 사용하여 사용자의 인증 자격 증명을 도용하고 리소스에 액세스할 수 있습니다.

기본적으로 Red Hat Single Sign-On의 모든 응답은 이러한 문제를 방지할 수 있는 특정 HTTP 헤더를 설정합니다. 특히 X-ovn-Options 및 Content- Security-Policy 를 설정합니다. 제어할 수 있는 세분화된 브라우저 액세스 권한이 있으므로 두 헤더의 정의를 확인해야 합니다.

절차

Admin Console에서 X-LEVEL-Options 및 Content-Security-Policy 헤더의 값을 지정할 수 있습니다.

  1. CloudEvent Settings 메뉴 항목을 클릭합니다.
  2. 보안 탭을 클릭합니다.

    보안 문제

    Security Defenses

기본적으로 Red Hat Single Sign-On은 iframe에 대해 동일한 원본 정책만 설정합니다.

16.6. SSL/HTTPS 요구 사항

OAuth 2.0/OpenID Connect에서는 보안을 위해 액세스 토큰을 사용합니다. 공격자는 네트워크에 액세스 토큰을 스캔하고 이를 사용하여 토큰에 권한이 있는 악의적인 작업을 수행할 수 있습니다. 이 공격을 man-in-the-middle 공격이라고 합니다. Red Hat Single Sign-On auth 서버와 클라이언트 Red Hat Single Sign-On 보안 간의 통신에 SSL/HTTPS를 사용하여 중간자 공격을 방지합니다.

Red Hat Single Sign-On에는 SSL/HTTPS에 대한 세 가지 모드 가 있습니다. SSL은 설정하기가 복잡하므로 Red Hat Single Sign-On은 localhost, 192.168.x.x 및 기타 개인 IP 주소와 같은 프라이빗 IP 주소를 통해 HTTPS 이외의 통신을 허용합니다. 프로덕션 환경에서 모든 작업에 SSL 및 SSL이 필수인지 확인하십시오.

어댑터/클라이언트 측에서 SSL 신뢰 관리자를 비활성화할 수 있습니다. Red Hat Single Sign-On에서 통신하는 클라이언트의 ID가 유효한지 확인하고 서버 인증서에 대해 DNS 도메인 이름을 확인합니다. 프로덕션에서 각 클라이언트 어댑터가 신뢰 저장소를 사용하여 DNS 중간자 공격을 방지하는지 확인합니다.

16.7. CSRF 공격

CSRF(Cross-site request forgery) 공격에서는 웹 사이트가 이미 인증된 사용자의 HTTP 요청을 사용합니다. 쿠키 기반 인증을 사용하는 모든 사이트는 CSRF 공격에 취약합니다. 게시된 양식 또는 쿼리 매개변수에 대해 상태 쿠키를 일치시켜 이러한 공격을 완화할 수 있습니다.

OAuth 2.0 로그인 사양에서는 상태 쿠키가 전송된 상태 매개 변수와 일치해야 합니다. Red Hat Single Sign-On은 사양의 이 부분을 완전히 구현하므로 모든 로그인이 보호됩니다.

Red Hat Single Sign-On 관리 콘솔은 백엔드 Red Hat Single Sign-On 관리 REST API를 REST로 호출하는 JavaScript/HTML5 애플리케이션입니다. 이러한 호출은 전달자 토큰 인증이 필요하며 JavaScript VMDK 호출로 구성되므로 CSRF는 불가능합니다. 관리 REST API를 구성하여 CORS 원본의 유효성을 확인할 수 있습니다.

Red Hat Single Sign-On의 사용자 계정 관리 섹션은 CSRF에 취약할 수 있습니다. CSRF 공격을 방지하기 위해 Red Hat Single Sign-On은 상태 쿠키를 설정하고 이 쿠키의 값을 숨겨진 양식 필드 또는 작업 링크 내에 쿼리 매개변수로 포함합니다. Red Hat Single Sign-On은 상태 쿠키와 비교하여 쿼리/form 매개변수를 확인하여 사용자가 호출했는지 확인합니다.

16.8. 특정 리디렉션 URI

등록된 리디렉션 URI를 최대한 구체적으로 설정합니다. 인증 코드 흐름에 vague 리디렉션 URI를 등록하면 악의적인 클라이언트가 더 광범위한 액세스 권한을 가진 다른 클라이언트를 가장할 수 있습니다. 예를 들어 두 클라이언트가 동일한 도메인에 있는 경우 가장 문제가 발생할 수 있습니다.

16.9. FAPI 컴플라이언스

Red Hat Single Sign-On 서버가 클라이언트의 보안 강화 및 FAPI 준수 여부를 확인하기 위해 FAPI 지원에 대한 클라이언트 정책을 구성할 수 있습니다. 자세한 내용은 보안 애플리케이션 및 서비스 가이드의 F API 섹션에 설명되어 있습니다. 그 외에도 클라이언트에 필요한 SSL과 같이 위에서 설명한 일부 보안 모범 사례, 사용된 리디렉션 URI 및 더 유사한 모범 사례도 확보됩니다.

16.10. 액세스 손상 및 새로 고침 토큰

Red Hat Single Sign-On에는 악의적인 행위자가 액세스 토큰을 도용하고 토큰 새로 고침을 방지하기 위한 몇 가지 조치가 포함되어 있습니다. 중요한 조치는 Red Hat Single Sign-On과 해당 클라이언트 및 애플리케이션 간에 SSL/HTTPS 통신을 적용하는 것입니다. Red Hat Single Sign-On은 기본적으로 SSL을 활성화하지 않습니다.

누출된 액세스 토큰으로 인한 손상을 완화하는 또 다른 조치는 토큰의 수명을 줄이는 것입니다. 시간 초과 페이지 내에서 토큰 수명을 지정할 수 있습니다. 액세스 토큰의 짧은 라이프 사이클을 통해 클라이언트 및 애플리케이션이 짧은 시간 후에 액세스 토큰을 새로 고칠 수 있습니다. 관리자가 누수를 감지하면 관리자는 모든 사용자 세션을 로그아웃하여 이러한 새로 고침 토큰을 무효화하거나 취소 정책을 설정할 수 있습니다.

새로 고침 토큰은 항상 클라이언트에 비공개로 유지되며 전송되지 않도록 합니다.

이러한 토큰을 키 소유자 토큰으로 발행하여 누출된 액세스 토큰 및 새로 고침 토큰으로 인한 손상을 완화할 수 있습니다. 자세한 내용은 OAuth 2.0 상호 TLS 클라이언트 인증서 Bound 액세스 토큰 을 참조하십시오.

액세스 토큰 또는 새로 고침 토큰이 손상된 경우 관리 콘솔에 액세스하여 해당 없음 정책을 모든 애플리케이션에 푸시합니다. 더 이상 사용되지 않는 정책을 푸시하면 해당 시간 이전에 발행된 토큰이 유효하지 않게 됩니다. 새로운 알 수 없는 정책을 푸시하면 애플리케이션이 Red Hat Single Sign-On에서 새 공개 키를 다운로드하고 손상된 영역 서명 키의 손상을 완화해야 합니다. 자세한 내용은 키 장 을 참조하십시오.

손상된 경우 특정 애플리케이션, 클라이언트 또는 사용자를 비활성화할 수 있습니다.

16.11. 권한 부여 코드 손상

OIDC Auth Code Flow 의 경우 Red Hat Single Sign-On은 권한 부여 코드에 대해 암호화 방식으로 강력한 무작위 값을 생성합니다. 권한 부여 코드는 액세스 토큰을 얻기 위해 한 번만 사용됩니다.

Admin Console 의 시간 초과 페이지에서 권한 부여 코드가 유효한 시간을 지정할 수 있습니다. 클라이언트가 코드에서 토큰을 요청할 수 있을 만큼 충분한 시간이 10초 미만인지 확인합니다.

또한 PKCE(Proofed Code Exchange)를 클라이언트에 적용하여 누출된 권한 부여 코드를 보호할 수도 있습니다.

16.12. Open redirectors

오픈 리디렉션자는 사용자 에이전트를 검증 없이 매개 변수 값으로 지정하는 위치로 자동으로 리디렉션하기 위해 매개 변수를 사용하는 끝점입니다. 공격자는 최종 사용자 인증 엔드포인트 및 리디렉션 URI 매개 변수를 사용하여 권한 부여 서버를 오픈 리디렉션 도구로 사용할 수 있습니다. 인증 서버에 대한 사용자 신뢰를 사용하여 피싱 공격을 시작할 수 있습니다.

Red Hat Single Sign-On에서는 등록된 모든 애플리케이션과 클라이언트가 하나 이상의 리디렉션 URI 패턴을 등록해야 합니다. 클라이언트가 Red Hat Single Sign-On이 리디렉션을 수행하도록 요청하면 Red Hat Single Sign-On은 유효한 등록된 URI 패턴 목록에 대해 리디렉션 URI를 확인합니다. 클라이언트 및 애플리케이션은 오픈 리디렉션기 공격을 완화하려면 가능한 특정 URI 패턴으로 등록해야 합니다.

애플리케이션에 비 http(s) 사용자 정의 체계가 필요한 경우 검증 패턴의 명시적 부분(예: custom:/app/*)이어야 합니다. 보안상의 이유로 * 와 같은 일반적인 패턴은 비 http(s) 스키마를 다루지 않습니다.

16.13. 암호 데이터베이스가 손상됨

Red Hat Single Sign-On은 PBKDF2 해시 알고리즘을 사용하여 원시 텍스트에 암호를 저장하지 않고 해시된 텍스트로 저장합니다. Red Hat Single Sign-On은 보안 커뮤니티에서 권장하는 반복 횟수인 27,500 해시 작업을 수행합니다. 이 해시 반복 수는 PBKDF2 해시에서 상당한 양의 CPU 리소스를 사용하므로 성능에 부정적인 영향을 미칠 수 있습니다.

16.14. 범위 제한

기본적으로 새 클라이언트 애플리케이션에는 무제한 역할 범위 매핑 이 있습니다. 해당 클라이언트의 모든 액세스 토큰에는 사용자가 보유한 모든 권한이 포함됩니다. 공격자가 클라이언트를 손상시키고 클라이언트의 액세스 토큰을 얻는 경우 사용자가 액세스할 수 있는 각 시스템이 손상됩니다.

각 클라이언트의 범위 메뉴 를 사용하여 액세스 토큰의 역할을 제한합니다. 또는 클라이언트 범위 메뉴를 사용하여 클라이언트 범위 수준에서 역할 범위 매핑을 설정하고 클라이언트에 클라이언트 범위를 할당할 수 있습니다.

16.15. 토큰 오디언스 제한

서비스 간 신뢰 수준이 낮은 환경에서 토큰의 대상을 제한합니다. 자세한 내용은 OAuth2 threat ModelECDHE 지원 섹션을 참조하십시오.

16.16. 인증 제한 세션

웹 브라우저에서 로그인 페이지가 처음 열리면 Red Hat Single Sign-On은 요청에 대한 유용한 정보를 저장하는 인증 세션이라는 오브젝트를 생성합니다. 동일한 브라우저의 다른 탭에서 새 로그인 페이지가 열 때마다 Red Hat Single Sign-On은 인증 세션에 저장된 인증 하위 세션이라는 새 레코드를 생성합니다. 인증 요청은 Admin CLI와 같은 모든 유형의 클라이언트에서 가져올 수 있습니다. 이 경우 하나의 인증 하위 세션을 사용하여 새 인증 세션도 생성됩니다. 인증 세션은 브라우저 흐름을 사용하는 것 이외의 다른 방법으로 생성할 수 있습니다. 아래 텍스트는 소스 흐름에 관계없이 적용됩니다.

참고

이 섹션에서는 인증 세션에 RHDG 공급자를 사용하는 배포에 대해 설명합니다.

인증 세션은 내부적으로 RootAuthenticationSessionEntity 로 저장됩니다. 각 Root AuthenticationSessionEntity 는 AuthenticationSessionEntity 개체의 컬렉션으로 RootAuthenticationSessionEntity 에 저장된 여러 인증 하위 세션을 포함할 수 있습니다. Red Hat Single Sign-On은 인증 세션을 전용 RHDG 캐시에 저장합니다. Root AuthenticationSessionEntity 당 AuthenticationSessionEntity의 수는 각 캐시 항목의 크기에 기여합니다. 인증 세션 캐시의 총 메모리 풋프린트는 저장된 RootAuthenticationSessionEntity 수와 각 Root AuthenticationSessionEntity 내의 AuthenticationSessionEntity 수에 따라 결정됩니다.

유지 관리되는 RootAuthenticationSessionEntity 개체 수는 브라우저에서 완료되지 않은 로그인 흐름 수에 해당합니다. RootAuthenticationSessionEntity 의 수를 제어 상태로 유지하려면 고급 방화벽 제어를 사용하여 수신 네트워크 트래픽을 제한하는 것이 좋습니다.

AuthenticationSessionEntity 가 많은 활성 RootAuthenticationSessionEntity 가 많은 배포에서 메모리 사용량이 증가할 수 있습니다. 로드 밸런서가 지원되지 않거나 세션 고정 용으로 구성되지 않은 경우 클러스터의 네트워크를 통한 로드가 크게 증가할 수 있습니다. 이러한 로드의 이유는 적절한 인증 세션을 소유하지 않는 노드에 배치하는 각 요청은 검색 및 스토리지 모두에 별도의 네트워크 전송이 필요한 소유자 노드의 인증 세션 레코드를 검색하고 업데이트해야하기 때문입니다.

Root AuthenticationSessionEntity 당 AuthenticationSessionEntity의 최대 수는 authSessionsLimit 속성을 설정하여 authenticationSessions SPI에서 구성할 수 있습니다. 기본값은 Root AuthenticationSessionEntity 당 300 AuthenticationSessionEntity로 설정됩니다. 이 제한에 도달하면 새 인증 세션 요청 후 가장 오래된 인증 하위 세션이 제거됩니다.

다음 예에서는 Root AuthenticationSessionEntity 당 활성 AuthenticationSessionEntity 수를 100으로 제한하는 방법을 보여줍니다.

<subsystem xmlns="urn:jboss:domain:keycloak-server:1.2">
    ...
    <spi name="authenticationSessions">
        <default-provider>infinispan</default-provider>
        <provider name="infinispan" enabled="true">
            <properties>
                <property name="authSessionsLimit" value="100"/>
            </properties>
        </provider>
    </spi>
    ...
</subsystem>

CLI 명령을 사용하는 동등한 구성:

/subsystem=keycloak-server/spi=authenticationSessions:add(default-provider=infinispan)
/subsystem=keycloak-server/spi=authenticationSessions/provider=infinispan:add(properties={authSessionsLimit => "100"},enabled=true)

16.17. SQL 인젝션 공격

현재 Red Hat Single Sign-On에는 알려진 SQL 삽입 취약점이 없습니다.

17장. 계정 콘솔

Red Hat Single Sign-On 사용자는 계정 콘솔을 통해 계정을 관리할 수 있습니다. 사용자는 자신의 프로필을 구성하고, 2 단계 인증을 추가하고, ID 공급자 계정을 포함하며, 장치 활동을 감독할 수 있습니다.

추가 리소스

  • 계정 콘솔은 모양과 언어 기본 설정에 따라 구성할 수 있습니다. 예를 들어 개인 정보 링크를 클릭하고 세부 정보를 작성 및 저장하여 개인 정보 페이지에 속성을 추가하는 것입니다. 자세한 내용은 참조:https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.6/html-single/server_developer_guide/[Server Developer Guide]를 참조하십시오.

17.1. 계정 콘솔에 액세스

모든 사용자가 계정 콘솔에 액세스할 수 있습니다.

절차

  1. 계정이 존재하는 Red Hat Single Sign-On 서버의 영역 이름 및 IP 주소를 기록해 두십시오.
  2. 웹 브라우저에서 < server-root>/auth/realms/{realm-name}/account 형식으로 URL을 입력합니다.
  3. 로그인 이름과 암호를 입력합니다.

계정 콘솔

Account Console

17.2. 로그인 방법 구성

기본 인증(로그인 이름 및 암호) 또는 2 단계 인증을 사용하여 이 콘솔에 로그인할 수 있습니다. 2 단계 인증의 경우 다음 절차 중 하나를 사용하십시오.

17.2.1. OTP를 사용한 2 단계 인증

사전 요구 사항

  • OTP는 해당 영역에 유효한 인증 메커니즘입니다.

절차

  1. 메뉴에서 계정 보안을 클릭합니다.
  2. Signing in 을 클릭합니다.
  3. Set up authenticator application 을 클릭합니다.

    로그인

    Signing in

  4. 화면에 표시되는 지침을 따라 모바일 장치에서 FreeOTP 또는 Google Authenticator 를 OTP 생성기로 사용합니다.
  5. 화면의 QR 코드를 모바일 장치의 OTP 생성기에 스캔합니다.
  6. 로그아웃한 후 다시 로그인합니다.
  7. 모바일 장치에 제공되는 OTP를 입력하여 프롬프트에 응답합니다.

17.2.2. WebAuthn을 사용한 2 단계 인증

사전 요구 사항

  • WebAuthn은 해당 영역에 유효한 2 단계 인증 메커니즘입니다. 자세한 내용은 WebAuthn 섹션을 참조하십시오.

절차

  1. 메뉴에서 Account Security 를 클릭합니다.
  2. Signing In 을 클릭합니다.
  3. Set up Security Key 를 클릭합니다.

    로그인 로그인

    Signing In With Security Key

  4. WebAuthn 보안 키를 준비합니다. 이 키를 준비하는 방법은 사용하는 WebAuthn 보안 키 유형에 따라 다릅니다. 예를 들어, USB 기반 Yubikey의 경우 노트북의 USB 포트에 키를 배치해야 할 수 있습니다.
  5. Register 를 클릭하여 보안 키를 등록합니다.
  6. 로그아웃한 후 다시 로그인합니다.
  7. 인증 흐름이 올바르게 설정되어 있다고 가정하면 보안 키로 인증을 두 번째 요소로 요청하는 메시지가 표시됩니다.

17.2.3. WebAuthn을 통한 암호 없는 인증

사전 요구 사항

  • WebAuthn은 해당 영역에 유효한 암호 없는 인증 메커니즘입니다. 자세한 내용은 Passwordless WebAuthn 섹션을 참조하십시오.

절차

  1. 메뉴에서 Account Security 를 클릭합니다.
  2. Signing In 을 클릭합니다.
  3. Passwordless 섹션에서 Set up Security Key 를 클릭합니다.

    로그인 로그인

    Signing In With Security Key

  4. WebAuthn 보안 키를 준비합니다. 이 키를 준비하는 방법은 사용하는 WebAuthn 보안 키 유형에 따라 다릅니다. 예를 들어, USB 기반 Yubikey의 경우 노트북의 USB 포트에 키를 배치해야 할 수 있습니다.
  5. Register 를 클릭하여 보안 키를 등록합니다.
  6. 로그아웃한 후 다시 로그인합니다.
  7. 인증 흐름이 올바르게 설정되어 있다고 가정하면 보안 키로 인증을 두 번째 요소로 요청하는 메시지가 표시됩니다. 더 이상 로그인하기 위해 비밀번호를 입력할 필요가 없습니다.

17.3. 장치 활동 보기

계정에 로그인한 장치를 볼 수 있습니다.

절차

  1. 메뉴에서 계정 보안을 클릭합니다.
  2. 장치 활동을 클릭합니다.
  3. 의심스러운 경우 장치를 로그아웃합니다.

장치

Devices

17.4. ID 공급자 계정 추가

계정을 ID 브로커 와 연결할 수 있습니다. 이 옵션은 종종 소셜 공급자 계정을 연결하는 데 사용됩니다.

절차

  1. 관리 콘솔에 로그인합니다.
  2. 메뉴에서 Identity Provider 를 클릭합니다.
  3. 공급자를 선택하고 필드를 완료합니다.
  4. 계정 콘솔로 돌아갑니다.
  5. 메뉴에서 계정 보안을 클릭합니다.
  6. 연결된 계정을 클릭합니다.

추가한 ID 공급자가 이 페이지에 표시됩니다.

연결된 계정

Linked Accounts

17.5. 다른 애플리케이션에 액세스

애플리케이션 메뉴 항목에는 액세스할 수 있는 애플리케이션이 표시됩니다. 이 경우 계정 콘솔만 사용할 수 있습니다.

애플리케이션

Applications

18장. 관리자 CLI

Red Hat Single Sign-On을 사용하면 Admin CLI 명령줄 툴을 사용하여 CLI(명령줄 인터페이스)에서 관리 작업을 수행할 수 있습니다.

18.1. 관리자 CLI 설치

Red Hat Single Sign-On은 bin 디렉토리에 실행 스크립트를 사용하여 Admin CLI 서버 배포를 패키징합니다.

Linux 스크립트는 kcadm.sh 라고도 하며 Windows용 스크립트를 kcadm.bundle이라고 합니다. Red Hat Single Sign-On 서버 디렉터리를 PATH 에 추가하여 파일 시스템의 모든 위치에서 클라이언트를 사용합니다.

예를 들면 다음과 같습니다.

  • Linux:
$ export PATH=$PATH:$KEYCLOAK_HOME/bin
$ kcadm.sh
  • Windows:
c:\> set PATH=%PATH%;%KEYCLOAK_HOME%\bin
c:\> kcadm
참고

KEYCLOAK_HOME 환경 변수를 Red Hat Single Sign-On Server 배포를 추출한 경로로 설정해야 합니다.

반복을 방지하기 위해 이 문서의 나머지 부분에서는 CLI 차이가 kcadm 명령 이름 이상입니다.

18.2. 관리 CLI 사용

Admin CLI는 Admin REST 엔드포인트에 HTTP 요청을 수행합니다. Admin REST 엔드포인트에 액세스하려면 인증이 필요합니다.

참고

특정 끝점의 JSON 속성에 대한 자세한 내용은 Admin REST API 설명서를 참조하십시오.

  1. 로그인하여 인증된 세션을 시작합니다. 이제 CRUD(Create, read, update, delete) 작업을 수행할 수 있습니다.

    예를 들면 다음과 같습니다.

    • Linux:

      $ kcadm.sh config credentials --server http://localhost:8080/auth --realm demo --user admin --client admin
      $ kcadm.sh create realms -s realm=demorealm -s enabled=true -o
      $ CID=$(kcadm.sh create clients -r demorealm -s clientId=my_client -s 'redirectUris=["http://localhost:8980/myapp/*"]' -i)
      $ kcadm.sh get clients/$CID/installation/providers/keycloak-oidc-keycloak-json
    • Windows:

      c:\> kcadm config credentials --server http://localhost:8080/auth --realm demo --user admin --client admin
      c:\> kcadm create realms -s realm=demorealm -s enabled=true -o
      c:\> kcadm create clients -r demorealm -s clientId=my_client -s "redirectUris=[\"http://localhost:8980/myapp/*\"]" -i > clientid.txt
      c:\> set /p CID=<clientid.txt
      c:\> kcadm get clients/%CID%/installation/providers/keycloak-oidc-keycloak-json
  2. 프로덕션 환경에서는 토큰이 노출되지 않도록 https: 를 사용하여 Red Hat Single Sign-On에 액세스합니다. Java의 기본 인증서 신뢰 저장소에 포함된 신뢰할 수 있는 인증 기관의 인증서가 서버의 인증서를 발행하지 않은 경우 truststore.jks 파일을 준비하고 Admin CLI에 이를 사용하도록 지시합니다.

    예를 들면 다음과 같습니다.

    • Linux:

      $ kcadm.sh config truststore --trustpass $PASSWORD ~/.keycloak/truststore.jks
    • Windows:

      c:\> kcadm config truststore --trustpass %PASSWORD% %HOMEPATH%\.keycloak\truststore.jks

18.3. 인증

관리 CLI로 로그인하면 다음을 지정합니다.

  • 서버 끝점 URL
  • 영역
  • 사용자 이름

또 다른 옵션은 clientId만 지정하여 사용할 고유한 서비스 계정을 생성하는 것입니다.

사용자 이름을 사용하여 로그인하면 지정된 사용자의 암호를 사용합니다. clientId를 사용하여 로그인하는 경우 사용자 암호가 아닌 클라이언트 시크릿만 필요합니다. 클라이언트 시크릿 대신 서명 JWT 를 사용할 수도 있습니다.

세션에 사용된 계정에 Admin REST API 작업을 호출할 수 있는 적절한 권한이 있는지 확인합니다. 예를 들어 realm-management 클라이언트의 realm-admin 역할은 사용자 영역을 관리할 수 있습니다.

인증에 두 가지 기본 메커니즘을 사용할 수 있습니다. 한 메커니즘은 kcadm 구성 자격 증명을 사용하여 인증된 세션을 시작합니다.

$ kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin

이 메커니즘은 가져온 액세스 토큰과 관련 새로 고침 토큰을 저장하여 kcadm 명령 호출 간에 인증된 세션을 유지 관리합니다. 개인 구성 파일에서 다른 시크릿을 유지 관리할 수 있습니다. 자세한 내용은 다음 장 을 참조하십시오.

두 번째 메커니즘은 호출 기간 동안 각 명령 호출을 인증합니다. 이 메커니즘은 서버의 부하와 토큰을 얻는 왕복에 소요되는 시간을 늘립니다. 이 방법의 이점은 호출 간에 토큰을 저장할 필요가 없으므로 디스크에 저장되지 않는다는 점입니다. Red Hat Single Sign-On은 --no-config 인수가 지정된 경우 이 모드를 사용합니다.

예를 들어 작업을 수행할 때 인증에 필요한 모든 정보를 지정합니다.

$ kcadm.sh get realms --no-config --server http://localhost:8080/auth --realm master --user admin --password admin

관리 CLI 사용에 대한 자세한 내용은 kcadm.sh help 명령을 실행합니다.

인증된 세션을 시작하는 방법에 대한 자세한 내용은 kcadm.sh config credentials --help 명령을 실행합니다.

18.4. 대체 구성 작업

기본적으로 Admin CLI는 kcadm.config 라는 구성 파일을 유지 관리합니다. Red Hat Single Sign-On은 이 파일을 사용자의 홈 디렉터리에 배치합니다. Linux 기반 시스템에서 전체 경로 이름은 $HOME/.keycloak/kcadm.config 입니다. Windows에서 전체 경로 이름은 %HOMEPATH%\.keycloak\kcadm.config 입니다.

인증된 여러 세션을 병렬로 유지 관리할 수 있도록 --config 옵션을 사용하여 다른 파일 또는 위치를 가리킬 수 있습니다.

참고

단일 스레드에서 단일 구성 파일에 연결된 작업을 수행합니다.

구성 파일이 시스템의 다른 사용자에게 표시되지 않는지 확인합니다. 여기에는 개인 액세스 토큰과 시크릿이 포함되어 있습니다. Red Hat Single Sign-On은 적절한 액세스 제한을 통해 ~/.keycloak 디렉터리와 해당 콘텐츠를 자동으로 생성합니다. 디렉터리가 이미 있는 경우 Red Hat Single Sign-On은 디렉터리의 권한을 업데이트하지 않습니다.

구성 파일에 시크릿을 저장하지 않도록 할 수 있지만 이렇게 하는 것은 불편하고 토큰 요청 수를 늘립니다. 모든 명령에 --no-config 옵션을 사용하고 kcadm 을 호출할 때마다 config credentials 명령에 필요한 인증 정보를 지정합니다.

18.5. 기본 작업 및 리소스 URI

Admin CLI는 특정 작업을 단순화하는 추가 명령을 사용하여 관리 REST API 엔드포인트에 대해 일반적으로 CRUD 작업을 수행할 수 있습니다.

주요 사용 패턴은 다음과 같습니다.

$ kcadm.sh create ENDPOINT [ARGUMENTS]
$ kcadm.sh get ENDPOINT [ARGUMENTS]
$ kcadm.sh update ENDPOINT [ARGUMENTS]
$ kcadm.sh delete ENDPOINT [ARGUMENTS]

create,get,update, delete commands map to the HTTP verbs POST,GET,PUT, DELETE, DELETE . ENDPOINT는 대상 리소스 URI이며 절대( http: 또는 https로 시작) 또는 상대적일 수 있습니다. Red Hat Single Sign-On에서 사용하여 다음 형식으로 절대 URL을 작성할 수 있습니다.

SERVER_URI/admin/realms/REALM/ENDPOINT

예를 들어 서버 http://localhost:8080/auth 및 영역에 대해 인증하는 경우 마스터 입니다. 사용자를 ENDPOINT로 사용하면 http://localhost:8080/auth/admin/realms/master/users 리소스 URL이 생성됩니다.

ENDPOINT를 클라이언트로 설정하면 유효한 리소스 URI는 http://localhost:8080/auth/admin/realms/master/clients 입니다.

Red Hat Single Sign-On에는 영역 용 컨테이너인 realms 엔드포인트가 있습니다. 다음으로 확인됩니다.

SERVER_URI/admin/realms

Red Hat Single Sign-On에는 serverinfo 끝점이 있습니다. 이 끝점은 영역과 독립적입니다.

realm-admin 기능이 있는 사용자로 인증하는 경우 여러 영역에서 명령을 수행해야 할 수 있습니다. 이 경우 -r 옵션을 지정하여 명령이 명시적으로 실행할 영역을 CLI에 알립니다. kcadm.sh 구성 자격 증명--realm 옵션에 지정된 realM을 사용하는 대신 명령은 TARGET_ REALM 을 사용합니다.

SERVER_URI/admin/realms/TARGET_REALM/ENDPOINT

예를 들면 다음과 같습니다.

$ kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin
$ kcadm.sh create users -s username=testuser -s enabled=true -r demorealm

이 예제에서는 마스터 영역에서 admin 사용자로 인증된 세션을 시작합니다. 그런 다음 리소스 URL http://localhost:8080/auth/admin/realms/demorealm/users 에 대해 POST 호출을 수행합니다.

createupdate 명령은 JSON 본문을 서버에 보냅니다. -f>-<NAME 을 사용하여 파일에서 미리 만든 문서를 읽을 수 있습니다. -f - 옵션을 사용할 수 있는 경우 Red Hat Single Sign-On은 표준 입력에서 메시지 본문을 읽습니다. 사용자 생성 예에 표시된 대로 개별 속성 및 해당 값을 지정할 수 있습니다. Red Hat Single Sign-On은 속성을 JSON 본문으로 작성하여 서버로 전송합니다.

Red Hat Single Sign-On에서 update 명령을 사용하여 리소스를 업데이트하는 여러 방법을 사용할 수 있습니다. 리소스의 현재 상태를 확인하여 파일에 저장하고 해당 파일을 편집한 후 업데이트를 위해 서버로 보낼 수 있습니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get realms/demorealm > demorealm.json
$ vi demorealm.json
$ kcadm.sh update realms/demorealm -f demorealm.json

이 방법은 전송된 JSON 문서의 속성을 사용하여 서버의 리소스를 업데이트합니다.

또 다른 방법은 -s, --set 옵션을 사용하여 새 값을 설정하여 업데이트를 수행하는 것입니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update realms/demorealm -s enabled=false

이 메서드에서는 enabled 특성을 false 로 설정합니다.

기본적으로 update 명령은 get 를 수행한 다음 새 특성 값을 기존 값과 병합합니다. 경우에 따라 끝점에서 put 명령을 지원하지만 get 명령은 지원하지 않을 수 있습니다. -n 옵션을 사용하여 get 명령을 먼저 실행하지 않고 put 명령을 수행하는 no-merge 업데이트를 수행할 수 있습니다.

18.6. 영역 작업

새 영역 생성

realms 엔드포인트에서 create 명령을 사용하여 새로 활성화된 영역을 생성합니다. 특성을 realm 로 설정하고 활성화됨.

$ kcadm.sh create realms -s realm=demorealm -s enabled=true

Red Hat Single Sign-On은 기본적으로 영역을 비활성화합니다. 인증을 위해 즉시 영역을 사용할 수 있습니다.

새 오브젝트에 대한 설명도 JSON 형식일 수 있습니다.

$ kcadm.sh create realms -f demorealm.json

파일에서 직접 영역 속성을 사용하여 JSON 문서를 보내거나 문서를 표준 입력으로 파이프할 수 있습니다.

예를 들면 다음과 같습니다.

  • Linux:
$ kcadm.sh create realms -f - << EOF
{ "realm": "demorealm", "enabled": true }
EOF
  • Windows:
c:\> echo { "realm": "demorealm", "enabled": true } | kcadm create realms -f -
기존 영역 나열

이 명령은 모든 영역의 목록을 반환합니다.

$ kcadm.sh get realms
참고

Red Hat Single Sign-On은 서버의 영역 목록을 필터링하여 사용자가 볼 수 있는 영역만 반환합니다.

모든 영역 속성 목록은 상세할 수 있으며 대부분의 사용자는 영역 이름 및 영역의 활성화 상태와 같은 속성 서브 세트에 관심이 있습니다. --fields 옵션을 사용하여 반환할 특성을 지정할 수 있습니다.

$ kcadm.sh get realms --fields realm,enabled

결과를 쉼표로 구분된 값으로 표시할 수 있습니다.

$ kcadm.sh get realms --fields realm --format csv --noquotes
특정 영역 가져오기

개별 영역을 가져오기 위해 컬렉션 URI에 영역 이름을 추가합니다.

$ kcadm.sh get realms/master
영역 업데이트
  1. 영역의 속성을 모두 변경하지 않으려면 -s 옵션을 사용하여 속성의 새 값을 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh update realms/demorealm -s enabled=false
  2. 쓰기 가능한 모든 속성을 새 값으로 설정하려면 다음을 수행합니다.

    1. get 명령을 실행합니다.
    2. JSON 파일의 현재 값을 편집합니다.
    3. 다시 제출합니다.

      예를 들면 다음과 같습니다.

      $ kcadm.sh get realms/demorealm > demorealm.json
      $ vi demorealm.json
      $ kcadm.sh update realms/demorealm -f demorealm.json
영역 삭제

다음 명령을 실행하여 영역을 삭제합니다.

$ kcadm.sh delete realms/demorealm
영역에 대한 모든 로그인 페이지 옵션 설정

특정 기능을 제어하는 특성을 true 로 설정합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update realms/demorealm -s registrationAllowed=true -s registrationEmailAsUsername=true -s rememberMe=true -s verifyEmail=true -s resetPasswordAllowed=true -s editUsernameAllowed=true
영역 키 나열

대상 영역의 끝점에 대해 get 작업을 사용합니다.

$ kcadm.sh get keys -r demorealm
새 영역 키 생성
  1. 새 RSA 생성 키 쌍을 추가하기 전에 대상 영역의 ID를 가져옵니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get realms/demorealm --fields id --format csv --noquotes
  2. kcadm.sh가 공개한 것처럼 기존 공급자보다 우선 순위가 높은 새 키 공급자를 추가하여 -r demorealm.

    예를 들면 다음과 같습니다.

    • Linux:

      $ kcadm.sh create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keySize=["2048"]'
    • Windows:

      c:\> kcadm create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keySize=[\"2048\"]"
  3. parentId 속성을 대상 영역의 ID 값으로 설정합니다.

    새로 추가된 키는 이제 kcadm.sh가 공개한 대로 활성 키가 됩니다. -r demorealm.

Java 키 저장소 파일에서 새 영역 키 추가
  1. 새 키 공급자를 추가하여 JKS 파일로 미리 준비한 새 키 쌍을 추가합니다.

    예를 들면 다음과 같습니다.

    • Linux:

      $ kcadm.sh create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keystore=["/opt/keycloak/keystore.jks"]' -s 'config.keystorePassword=["secret"]' -s 'config.keyPassword=["secret"]' -s 'config.keyAlias=["localhost"]'
    • Windows:

      c:\> kcadm create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keystore=[\"/opt/keycloak/keystore.jks\"]" -s "config.keystorePassword=[\"secret\"]" -s "config.keyPassword=[\"secret\"]" -s "config.keyAlias=[\"localhost\"]"
  2. 키 저장소 , keystore Password,keyPassword, alias 의 속성 값을 특정 키 저장소와 일치하도록 변경해야 합니다.
  3. parentId 속성을 대상 영역의 ID 값으로 설정합니다.
키를 수동 또는 키 비활성화
  1. 패시브를 만들려는 키를 식별합니다.

    $ kcadm.sh get keys -r demorealm
  2. 키의 providerId 특성을 사용하여 구성 요소/PROVIDER_ID 와 같은 끝점 URI를 구성합니다.
  3. 업데이트를 수행합니다.

    예를 들면 다음과 같습니다.

    • Linux:

      $ kcadm.sh update components/PROVIDER_ID -r demorealm -s 'config.active=["false"]'
    • Windows:

      c:\> kcadm update components/PROVIDER_ID -r demorealm -s "config.active=[\"false\"]"

      다른 주요 속성을 업데이트할 수 있습니다.

  4. 키를 비활성화하려면 새 enabled 값을 설정합니다(예: config.enabled=["false"] ).
  5. 키의 우선 순위를 변경하려면 새 우선순위 값을 설정합니다(예: config.priority=["110"] ).
이전 키 삭제
  1. 삭제 중인 키가 비활성 상태이고 비활성화되었는지 확인합니다. 이 작업은 애플리케이션 및 사용자가 보유한 기존 토큰이 실패하지 않도록하기 위한 것입니다.
  2. 삭제할 키를 식별합니다.

    $ kcadm.sh get keys -r demorealm
  3. 키의 providerId 를 사용하여 삭제를 수행합니다.

    $ kcadm.sh delete components/PROVIDER_ID -r demorealm
영역에 대한 이벤트 로깅 구성

events/config 끝점에서 update 명령을 사용합니다.

eventsListeners 속성에는 이벤트를 수신하는 모든 이벤트 리스너를 지정하여 EventListenerProviderFactory ID 목록이 포함되어 있습니다. 기본 제공 이벤트 스토리지를 제어하는 속성을 사용할 수 있으므로 Admin REST API를 사용하여 이전 이벤트를 쿼리할 수 있습니다. Red Hat Single Sign-On은 서비스 호출 로깅(eventsEnabled) 및 Admin Console 또는 Admin REST API(adminEventsEnabled)에서 트리거한 감사 이벤트를 별도로 제어할 수 있습니다. 데이터베이스가 채워지지 않도록 eventsExpiration 이벤트가 만료되도록 설정할 수 있습니다. Red Hat Single Sign-On은 이벤트를 초 단위로 표시(Time-to-Live)로 설정합니다.

모든 이벤트를 수신하는 기본 제공 이벤트 리스너를 설정하고 JBoss-logging을 통해 이벤트를 기록할 수 있습니다. org.keycloak.events 로거를 사용하여 Red Hat Single Sign-On은 오류 이벤트를 WARN 및 기타 이벤트를 DEBUG 로 기록합니다.

예를 들면 다음과 같습니다.

  • Linux:
$ kcadm.sh update events/config -r demorealm -s 'eventsListeners=["jboss-logging"]'
  • Windows:
c:\> kcadm update events/config -r demorealm -s "eventsListeners=[\"jboss-logging\"]"

예를 들면 다음과 같습니다.

Admin REST를 통해 이벤트를 검색할 수 있도록 감사 이벤트를 포함하여 사용 가능한 모든 ERROR 이벤트에 대해 스토리지를 설정할 수 있습니다.

  • Linux:
$ kcadm.sh update events/config -r demorealm -s eventsEnabled=true -s 'enabledEventTypes=["LOGIN_ERROR","REGISTER_ERROR","LOGOUT_ERROR","CODE_TO_TOKEN_ERROR","CLIENT_LOGIN_ERROR","FEDERATED_IDENTITY_LINK_ERROR","REMOVE_FEDERATED_IDENTITY_ERROR","UPDATE_EMAIL_ERROR","UPDATE_PROFILE_ERROR","UPDATE_PASSWORD_ERROR","UPDATE_TOTP_ERROR","VERIFY_EMAIL_ERROR","REMOVE_TOTP_ERROR","SEND_VERIFY_EMAIL_ERROR","SEND_RESET_PASSWORD_ERROR","SEND_IDENTITY_PROVIDER_LINK_ERROR","RESET_PASSWORD_ERROR","IDENTITY_PROVIDER_FIRST_LOGIN_ERROR","IDENTITY_PROVIDER_POST_LOGIN_ERROR","CUSTOM_REQUIRED_ACTION_ERROR","EXECUTE_ACTIONS_ERROR","CLIENT_REGISTER_ERROR","CLIENT_UPDATE_ERROR","CLIENT_DELETE_ERROR"]' -s eventsExpiration=172800
  • Windows:
c:\> kcadm update events/config -r demorealm -s eventsEnabled=true -s "enabledEventTypes=[\"LOGIN_ERROR\",\"REGISTER_ERROR\",\"LOGOUT_ERROR\",\"CODE_TO_TOKEN_ERROR\",\"CLIENT_LOGIN_ERROR\",\"FEDERATED_IDENTITY_LINK_ERROR\",\"REMOVE_FEDERATED_IDENTITY_ERROR\",\"UPDATE_EMAIL_ERROR\",\"UPDATE_PROFILE_ERROR\",\"UPDATE_PASSWORD_ERROR\",\"UPDATE_TOTP_ERROR\",\"VERIFY_EMAIL_ERROR\",\"REMOVE_TOTP_ERROR\",\"SEND_VERIFY_EMAIL_ERROR\",\"SEND_RESET_PASSWORD_ERROR\",\"SEND_IDENTITY_PROVIDER_LINK_ERROR\",\"RESET_PASSWORD_ERROR\",\"IDENTITY_PROVIDER_FIRST_LOGIN_ERROR\",\"IDENTITY_PROVIDER_POST_LOGIN_ERROR\",\"CUSTOM_REQUIRED_ACTION_ERROR\",\"EXECUTE_ACTIONS_ERROR\",\"CLIENT_REGISTER_ERROR\",\"CLIENT_UPDATE_ERROR\",\"CLIENT_DELETE_ERROR\"]" -s eventsExpiration=172800

저장된 이벤트 유형을 사용 가능한 모든 이벤트 유형으로 재설정할 수 있습니다. 이 값을 빈 목록에 설정하는 것은 all과 동일합니다.

$ kcadm.sh update events/config -r demorealm -s enabledEventTypes=[]

감사 이벤트 스토리지를 활성화할 수 있습니다.

$ kcadm.sh update events/config -r demorealm -s adminEventsEnabled=true -s adminEventsDetailsEnabled=true

마지막 100개의 이벤트를 받을 수 있습니다. 이벤트는 최신부터 가장 오래된 것까지 정렬됩니다.

$ kcadm.sh get events --offset 0 --limit 100

저장된 모든 이벤트를 삭제할 수 있습니다.

$ kcadm delete events
캐시 플러시
  1. 이러한 끝점 중 하나와 함께 create 명령을 사용하여 캐시를 지웁니다.

    • clear-realm-cache
    • clear-user-cache
    • clear-keys-cache
  2. 영역을 대상 영역과 동일한 값으로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create clear-realm-cache -r demorealm -s realm=demorealm
    $ kcadm.sh create clear-user-cache -r demorealm -s realm=demorealm
    $ kcadm.sh create clear-keys-cache -r demorealm -s realm=demorealm
내보낸 .json 파일에서 영역 가져오기
  1. partialImport 엔드포인트에서 create 명령을 사용합니다.
  2. ifResourceExistsFAIL,SKIP 또는 OVERWRITE 로 설정합니다.
  3. 내보낸 영역 .json 파일을 제출하려면 -f 를 사용합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create partialImport -r demorealm2 -s ifResourceExists=FAIL -o -f demorealm.json

    영역이 아직 없으면 먼저 만듭니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create realms -s realm=demorealm2 -s enabled=true

18.7. 역할 작업

영역 역할 생성

역할 끝점을 사용하여 영역 역할을 생성합니다.

$ kcadm.sh create roles -r demorealm -s name=user -s 'description=Regular user with a limited set of permissions'
클라이언트 역할 생성
  1. 클라이언트를 식별합니다.
  2. get 명령을 사용하여 사용 가능한 클라이언트를 나열합니다.

    $ kcadm.sh get clients -r demorealm --fields id,clientId
  3. clientId 특성을 사용하여 클라이언트/ID/roles 와 같은 엔드포인트 URI를 구성하여 새 역할을 생성합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles -r demorealm -s name=editor -s 'description=Editor can edit, and publish any article'
영역 역할 나열

roles 끝점에서 get 명령을 사용하여 기존 영역 역할을 나열합니다.

$ kcadm.sh get roles -r demorealm

get-roles 명령을 사용할 수도 있습니다.

$ kcadm.sh get-roles -r demorealm
클라이언트 역할 나열

Red Hat Single Sign-On에는 영역 및 클라이언트 역할 목록을 단순화하는 전용 get-roles 명령이 있습니다. 명령은 get 명령의 확장이며 get 명령과 동일하게 작동하지만 역할을 나열하기 위한 추가 의미가 있습니다.

clientId(--cclientid) 옵션 또는 id (-cid ) 옵션을 전달하여 get- roles명령을 사용하여 클라이언트 역할을 나열할 클라이언트를 식별합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get-roles -r demorealm --cclientid realm-management
특정 영역 역할 가져오기

get 명령과 역할 이름을 사용하여 특정 영역 역할, roles/ROLE_NAME 에 대한 끝점 URI를 구성합니다. 여기서 user 는 기존 역할의 이름입니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get roles/user -r demorealm

get-roles 명령을 사용하여 역할 이름(--rolename 옵션) 또는 ID(-roleid 옵션)를 전달할 수 있습니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get-roles -r demorealm --rolename user
특정 클라이언트 역할 가져오기

get-roles 명령을 사용하여 clientId 속성(--cclientid 옵션) 또는 ID 속성(-cid 옵션)을 전달하여 클라이언트를 식별하고 역할 이름(--rolename 옵션) 또는 role ID 특성(--roleid)을 전달하여 특정 클라이언트 역할을 식별합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get-roles -r demorealm --cclientid realm-management --rolename manage-clients
영역 역할 업데이트

특정 영역 역할을 가져오는 데 사용한 엔드포인트 URI와 함께 update 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update roles/user -r demorealm -s 'description=Role representing a regular user'
클라이언트 역할 업데이트

특정 클라이언트 역할을 가져오는 데 사용한 엔드포인트 URI와 함께 update 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles/editor -r demorealm -s 'description=User that can edit, and publish articles'
영역 역할 삭제

특정 영역 역할을 가져오는 데 사용한 엔드포인트 URI와 함께 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete roles/user -r demorealm
클라이언트 역할 삭제

특정 클라이언트 역할을 가져오는 데 사용한 엔드포인트 URI와 함께 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles/editor -r demorealm
복합 역할에 할당, 사용 가능한 유효 영역 역할 나열

get-roles 명령을 사용하여 복합 역할에 할당된 사용 가능한 유효 영역 역할을 나열합니다.

  1. 복합 역할에 할당된 영역 역할을 나열하려면 대상 복합 역할을 이름(-rname 옵션) 또는 ID(--rid 옵션)로 지정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole
  2. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole --effective
  3. --available 옵션을 사용하여 복합 역할에 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole --available
복합 역할에 할당, 사용 가능하고 효과적인 클라이언트 역할 나열

get-roles 명령을 사용하여 복합 역할에 할당, 사용 가능한 유효 클라이언트 역할을 나열합니다.

  1. 복합 역할에 할당된 클라이언트 역할을 나열하려면 이름(--rname 옵션) 또는 ID(-rid 옵션) 및 client by the clientId 속성(-- cclientid option) 또는 ID(-cid 옵션)로 대상 복합 역할을 나열할 수 있습니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management
  2. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management --effective
  3. --available 옵션을 사용하여 대상 복합 역할에 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management --available
복합 역할에 영역 역할 추가

Red Hat Single Sign-On은 영역 역할 및 클라이언트 역할을 추가하기 위한 애드온 역할을 제공합니다.

이 예제에서는 복합 역할 testrole사용자 역할을 추가합니다.

$ kcadm.sh add-roles --rname testrole --rolename user -r demorealm
복합 역할에서 영역 역할 제거

Red Hat Single Sign-On은 영역 역할 및 클라이언트 역할을 제거하기 위한 remove-roles 명령을 제공합니다.

다음 예제에서는 대상 복합 역할 testrole 에서 user 역할을 제거합니다.

$ kcadm.sh remove-roles --rname testrole --rolename user -r demorealm
영역 역할에 클라이언트 역할 추가

Red Hat Single Sign-On은 영역 역할 및 클라이언트 역할을 추가하기 위한 애드온 역할을 제공합니다.

다음 예제에서는 클라이언트 영역 관리 ,create- clientview-users 에 정의된 역할을 testrole 복합 역할에 추가합니다.

$ kcadm.sh add-roles -r demorealm --rname testrole --cclientid realm-management --rolename create-client --rolename view-users
클라이언트 역할에 클라이언트 역할 추가
  1. get-roles 명령을 사용하여 복합 클라이언트 역할의 ID를 결정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --cclientid test-client --rolename operations
  2. 클라이언트가 test-client 라는 클라이언트 역할, support 라는 클라이언트 역할과 "fc400897-ef6a-4e8c-872b-1581b7fa8a7a71" ID가 있는 복합 역할이 되는 클라이언트 역할이 있다고 가정합니다.
  3. 다음 예제를 사용하여 복합 역할에 다른 역할을 추가합니다.

    $ kcadm.sh add-roles -r demorealm --cclientid test-client --rid fc400897-ef6a-4e8c-872b-1581b7fa8a71 --rolename support
  4. get-roles --all 명령을 사용하여 복합 역할의 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles --rid fc400897-ef6a-4e8c-872b-1581b7fa8a71 --all
복합 역할에서 클라이언트 역할 제거

remove-roles 명령을 사용하여 복합 역할에서 클라이언트 역할을 제거합니다.

다음 예제를 사용하여 testrole 복합 역할에서 클라이언트 realm-management, create-client 역할 및 view-users 역할에 정의된 두 역할을 제거합니다.

$ kcadm.sh remove-roles -r demorealm --rname testrole --cclientid realm-management --rolename create-client --rolename view-users
그룹에 클라이언트 역할 추가

add-roles 명령을 사용하여 영역 역할 및 클라이언트 역할을 추가합니다.

다음 예제에서는 클라이언트 realm-management,create-clientview-users 에 정의된 역할을 Group 그룹(-gname 옵션)에 추가합니다. 또는 그룹을 ID(-gid 옵션)로 지정할 수도 있습니다.

자세한 내용은 그룹 작업을 참조하십시오.

$ kcadm.sh add-roles -r demorealm --gname Group --cclientid realm-management --rolename create-client --rolename view-users
그룹에서 클라이언트 역할 제거

remove-roles 명령을 사용하여 그룹에서 클라이언트 역할을 제거합니다.

다음 예제에서는 Group 그룹에서 클라이언트 영역 관리,create-clientview-users 에 정의된 두 개의 역할을 제거합니다.

자세한 내용은 그룹 작업을 참조하십시오.

$ kcadm.sh remove-roles -r demorealm --gname Group --cclientid realm-management --rolename create-client --rolename view-users

18.8. 클라이언트 작업

클라이언트 생성
  1. 클라이언트 끝점에서 create 명령을 실행하여 새 클라이언트를 생성합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create clients -r demorealm -s clientId=myapp -s enabled=true
  2. 인증할 어댑터의 시크릿을 설정하는 경우 시크릿을 지정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create clients -r demorealm -s clientId=myapp -s enabled=true -s clientAuthenticatorType=client-secret -s secret=d0b8122f-8dfb-46b7-b68a-f5cc4e25d000
클라이언트 나열

clients 끝점에서 get 명령을 사용하여 클라이언트를 나열합니다.

이 예제에서는 출력을 필터링하여 idclientId 속성만 나열합니다.

$ kcadm.sh get clients -r demorealm --fields id,clientId
특정 클라이언트 가져오기

클라이언트 ID를 사용하여 클라이언트 /ID 와 같은 특정 클라이언트를 대상으로 하는 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm
특정 클라이언트의 현재 보안 가져오기

클라이언트 ID를 사용하여 클라이언트/ID/client-secret 과 같은 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get clients/$CID/client-secret
특정 클라이언트에 대한 새 보안 생성

클라이언트 ID를 사용하여 클라이언트/ID/client-secret 과 같은 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create clients/$CID/client-secret
특정 클라이언트의 현재 보안 업데이트

클라이언트 ID를 사용하여 클라이언트/ID 와 같은 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update clients/$CID -s "secret=newSecret"
특정 클라이언트의 어댑터 구성 파일(keycloak.json) 가져오기

클라이언트 ID를 사용하여 client/ ID/installation/providers/keycloakc-keycloak-json 과 같은 특정 클라이언트를 대상으로 하는 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3/installation/providers/keycloak-oidc-keycloak-json -r demorealm
특정 클라이언트에 대한 WildFly 하위 시스템 어댑터 구성 가져오기

클라이언트 ID를 사용하여 clients/ID/installation/providers/keycloak-oidc-jboss-subsystem 과 같은 특정 클라이언트를 대상으로 하는 엔드포인트 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3/installation/providers/keycloak-oidc-jboss-subsystem -r demorealm
특정 클라이언트의 Docker-v2 예제 구성 가져오기

클라이언트 ID를 사용하여 client/ ID/installation/providers/docker-v2-compose-yaml yaml 과 같은 특정 클라이언트를 대상으로 하는 끝점 URI를 구성합니다.

응답은 .zip 형식입니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get http://localhost:8080/auth/admin/realms/demorealm/clients/8f271c35-44e3-446f-8953-b0893810ebe7/installation/providers/docker-v2-compose-yaml -r demorealm > keycloak-docker-compose-yaml.zip
클라이언트 업데이트

특정 클라이언트를 가져오는 데 사용하는 것과 동일한 끝점 URI로 update 명령을 사용합니다.

예를 들면 다음과 같습니다.

  • Linux:
$ kcadm.sh update clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm -s enabled=false -s publicClient=true -s 'redirectUris=["http://localhost:8080/myapp/*"]' -s baseUrl=http://localhost:8080/myapp -s adminUrl=http://localhost:8080/myapp
  • Windows:
c:\> kcadm update clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm -s enabled=false -s publicClient=true -s "redirectUris=[\"http://localhost:8080/myapp/*\"]" -s baseUrl=http://localhost:8080/myapp -s adminUrl=http://localhost:8080/myapp
클라이언트 삭제

특정 클라이언트를 가져오는 데 사용하는 것과 동일한 끝점 URI로 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm
클라이언트 서비스 계정에 대한 역할 추가 또는 제거

클라이언트의 서비스 계정은 사용자 이름 service-account-CLIENT_ID 가 있는 사용자 계정입니다. 이 계정에서 일반 계정과 동일한 사용자 작업을 수행할 수 있습니다.

18.9. 사용자 작업

사용자 생성

사용자 끝점에서 create 명령을 실행하여 새 사용자를 생성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create users -r demorealm -s username=testuser -s enabled=true
사용자 나열

사용자 엔드포인트를 사용하여 사용자를 나열합니다. 다음에 로그인할 때 대상 사용자가 암호를 변경해야 합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get users -r demorealm --offset 0 --limit 1000

사용자 이름 ,firstName ,lastName, email 으로 사용자를 필터링할 수 있습니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get users -r demorealm -q email=google.com
$ kcadm.sh get users -r demorealm -q username=testuser
참고

필터는 정확히 일치하는 항목을 사용하지 않습니다. 이 예제는 *ECDHE * 패턴에 대한 username 속성 값과 일치합니다.

여러 -q 옵션을 지정하여 여러 속성을 필터링할 수 있습니다. Red Hat Single Sign-On은 모든 속성에 대해서만 조건과 일치하는 사용자를 반환합니다.

특정 사용자 가져오기

사용자 ID를 사용하여 사용자/USER_ID와 같은 엔드포인트 URI를 작성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm
사용자 업데이트

특정 사용자를 가져오는 데 사용하는 것과 동일한 끝점 URI로 update 명령을 사용합니다.

예를 들면 다음과 같습니다.

  • Linux:
$ kcadm.sh update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm -s 'requiredActions=["VERIFY_EMAIL","UPDATE_PROFILE","CONFIGURE_TOTP","UPDATE_PASSWORD"]'
  • Windows:
c:\> kcadm update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm -s "requiredActions=[\"VERIFY_EMAIL\",\"UPDATE_PROFILE\",\"CONFIGURE_TOTP\",\"UPDATE_PASSWORD\"]"
사용자 삭제

특정 사용자를 가져오는 데 사용하는 것과 동일한 끝점 URI로 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm
사용자 암호 재설정

전용 set-password 명령을 사용하여 사용자 암호를 재설정합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh set-password -r demorealm --username testuser --new-password NEWPASSWORD --temporary

이 명령은 사용자의 임시 암호를 설정합니다. 다음에 로그인할 때 대상 사용자는 암호를 변경해야 합니다.

userid를 사용하여 id 속성을 사용하여 사용자를 지정할 수 있습니다.

users/USER_ID/reset-password 와 같은 특정 사용자를 가져오는 데 사용한 끝점에서 구성된 엔드포인트에서 update 명령을 사용하여 동일한 결과를 얻을 수 있습니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2/reset-password -r demorealm -s type=password -s value=NEWPASSWORD -s temporary=true -n

n 매개변수를 사용하면 PUT 명령보다 먼저 Red Hat Single Sign-On이 PUT 명령을 수행하지 않고 PUT 명령을 수행할 수 있습니다. reset-password 엔드포인트에서 GET 을 지원하지 않기 때문에 이 작업이 필요합니다.

사용자에게 할당, 사용 가능, 효과적인 영역 역할 나열

get-roles 명령을 사용하여 사용자에게 할당, 사용 가능한 유효 영역 역할을 나열할 수 있습니다.

  1. 사용자 이름 또는 ID로 대상 사용자를 지정하여 사용자가 할당된 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser
  2. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser --effective
  3. --available 옵션을 사용하여 사용자에게 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser --available
사용자에게 할당, 사용 가능하고 효과적인 클라이언트 역할 나열

get-roles 명령을 사용하여 사용자에게 할당된 사용 가능하고 효과적인 클라이언트 역할을 나열합니다.

  1. 사용자 이름(--uusername 옵션) 또는 ID(-uid 옵션) 및 클라이언트를 clientId 특성(--cclientid 옵션) 또는 ID(--cid 옵션)로 지정하여 사용자에게 할당된 클라이언트 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management
  2. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management --effective
  3. --available 옵션을 사용하여 사용자에게 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management --available
사용자에게 영역 역할 추가

add-roles 명령을 사용하여 사용자에게 영역 역할을 추가합니다.

다음 예제를 사용하여 user 역할을 사용자 testuser 에 추가합니다.

$ kcadm.sh add-roles --uusername testuser --rolename user -r demorealm
사용자에서 영역 역할 제거

remove-roles 명령을 사용하여 사용자에서 영역 역할을 제거합니다.

다음 예제를 사용하여 testuser 사용자 역할을 제거합니다.

$ kcadm.sh remove-roles --uusername testuser --rolename user -r demorealm
사용자에게 클라이언트 역할 추가

add-roles 명령을 사용하여 사용자에게 클라이언트 역할을 추가합니다.

다음 예제를 사용하여 클라이언트 영역 관리에 정의된 두 개의 역할인 create-client 역할 및 view-users 역할을 사용자 testuser 에 추가합니다.

$ kcadm.sh add-roles -r demorealm --uusername testuser --cclientid realm-management --rolename create-client --rolename view-users
사용자에서 클라이언트 역할 제거

remove-roles 명령을 사용하여 사용자의 클라이언트 역할을 제거합니다.

다음 예제를 사용하여 영역 관리 클라이언트에 정의된 두 역할을 제거합니다.

$ kcadm.sh remove-roles -r demorealm --uusername testuser --cclientid realm-management --rolename create-client --rolename view-users
사용자 세션 나열
  1. 사용자 ID를 식별하며,
  2. ID를 사용하여 사용자/ID/sessions와 같은 끝점 URI를 작성합니다.
  3. get 명령을 사용하여 사용자 세션 목록을 검색합니다.

    예를 들면 다음과 같습니다.

    $kcadm get users/6da5ab89-3397-4205-afaa-e201ff638f9e/sessions
특정 세션에서 사용자 로그아웃
  1. 앞서 설명한 대로 세션 ID를 확인합니다.
  2. 세션 ID를 사용하여 세션/ID 와 같은 끝점 URI를 구성합니다.
  3. 삭제 명령을 사용하여 세션을 무효화합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh delete sessions/d0eaa7cc-8c5d-489d-811a-69d3c4ec84d1
모든 세션에서 사용자 로그아웃

사용자 ID를 사용하여 사용자/ID/logout 과 같은 끝점 URI를 구성합니다.

create 명령을 사용하여 해당 엔드포인트 URI에서 POST 를 수행합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create users/6da5ab89-3397-4205-afaa-e201ff638f9e/logout -r demorealm -s realm=demorealm -s user=6da5ab89-3397-4205-afaa-e201ff638f9e

18.10. 그룹 작업

그룹 생성

groups 엔드포인트에서 create 명령을 사용하여 새 그룹을 생성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create groups -r demorealm -s name=Group
그룹 나열

groups 끝점에서 get 명령을 사용하여 그룹을 나열합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get groups -r demorealm
특정 그룹 가져오기

그룹의 ID를 사용하여 groups/GROUP_ID 와 같은 끝점 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get groups/51204821-0580-46db-8f2d-27106c6b5ded -r demorealm
그룹 업데이트

특정 그룹을 가져오는 데 사용하는 것과 동일한 끝점 URI로 update 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update groups/51204821-0580-46db-8f2d-27106c6b5ded -s 'attributes.email=["group@example.com"]' -r demorealm
그룹 삭제

특정 그룹을 가져오는 데 사용하는 것과 동일한 끝점 URI로 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete groups/51204821-0580-46db-8f2d-27106c6b5ded -r demorealm
하위 그룹 생성

그룹을 나열하여 상위 그룹의 ID를 찾습니다. 해당 ID를 사용하여 그룹/GROUP_ID/3-4과 같은 엔드포인트 URI를 구성합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create groups/51204821-0580-46db-8f2d-27106c6b5ded/children -r demorealm -s name=SubGroup
다른 그룹 아래에서 그룹 이동
  1. 기존 상위 그룹의 ID와 기존 하위 그룹의 ID를 찾습니다.
  2. 상위 그룹의 ID를 사용하여 groups/PARENT_GROUP_ID/Unhealthy와 같은 엔드포인트 URI를 구성합니다.
  3. 이 끝점에서 create 명령을 실행하고 하위 그룹의 ID를 JSON 본문으로 전달합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create groups/51204821-0580-46db-8f2d-27106c6b5ded/children -r demorealm -s id=08d410c6-d585-4059-bb07-54dcb92c5094 -s name=SubGroup
특정 사용자에 대한 그룹 가져오기

사용자 ID를 사용하여 사용자 /USER_ID/groups와 같은 엔드포인트 URI를 작성할 그룹의 사용자 멤버십을 결정합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups -r demorealm
그룹에 사용자 추가

사용자 ID 및 사용자 /USER_ID/groups/GROUP_ID 와 같은 그룹 ID 로 구성된 엔드포인트 URI와 함께 update 명령을 사용하여 그룹에 사용자를 추가합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh update users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups/ce01117a-7426-4670-a29a-5c118056fe20 -r demorealm -s realm=demorealm -s userId=b544f379-5fc4-49e5-8a8d-5cfb71f46f53 -s groupId=ce01117a-7426-4670-a29a-5c118056fe20 -n
그룹에서 사용자 제거

사용자 /USER_ID/groups/GROUP_ID와 같은 그룹에 사용자를 추가하는 데 사용하는 것과 동일한 끝점 URI에서 delete 명령을 사용하여 그룹에서 사용자를 제거합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups/ce01117a-7426-4670-a29a-5c118056fe20 -r demorealm
그룹에 대해 할당, 사용 가능, 효과적인 영역 역할 나열

전용 get-roles 명령을 사용하여 그룹에 대해 할당, 사용 가능한 유효 영역 역할을 나열합니다.

  1. 그룹에 할당된 영역 역할을 나열하려면 이름(-gname 옵션), 경로(-gpath 옵션) 또는 ID(-gid 옵션)로 대상 그룹을 지정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group
  2. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group --effective
  3. --available 옵션을 사용하여 그룹에 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group --available
그룹에 대해 할당, 사용 가능 및 효과적인 클라이언트 역할 나열

get-roles 명령을 사용하여 그룹에 대해 할당, 사용 가능하고 효과적인 클라이언트 역할을 나열합니다.

  1. 대상 그룹을 이름(-gname 옵션) 또는 ID(-gid 옵션)로 지정합니다.
  2. 사용자에게 할당된 클라이언트 역할을 나열하려면 clientId 특성(-cclientid 옵션) 또는 ID(--id 옵션)로 클라이언트를 지정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management
  3. -- effective 옵션을 사용하여 유효 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management --effective
  4. --available 옵션을 사용하여 그룹에 계속 추가할 수 있는 영역 역할을 나열합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management --available

18.11. ID 공급자 작업

사용 가능한 ID 공급자 나열

serverinfo 끝점을 사용하여 사용 가능한 ID 공급자를 나열합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get serverinfo -r demorealm --fields 'identityProviders(*)'
참고

Red Hat Single Sign-On은 realms 엔드포인트와 유사하게 serverinfo 엔드포인트를 처리합니다. Red Hat Single Sign-On은 특정 영역 외부에 있기 때문에 대상 영역에 대한 끝점을 확인하지 않습니다.

구성된 ID 공급자 나열

identity-provider/instances 끝점을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get identity-provider/instances -r demorealm --fields alias,providerId,enabled
구성된 특정 ID 공급자 가져오기

ID 공급자의 별칭 속성을 사용하여 identity-provider/instances/ALIAS 와 같은 엔드포인트 URI를 구성하여 특정 ID 공급자를 가져옵니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get identity-provider/instances/facebook -r demorealm
구성된 특정 ID 공급자 제거

구성된 특정 ID 공급자를 제거하기 위해 사용하는 것과 동일한 끝점 URI와 함께 delete 명령을 사용합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh delete identity-provider/instances/facebook -r demorealm
Keycloak OpenID Connect ID 공급자 구성
  1. 새 ID 공급자 인스턴스를 생성할 때 keycloak-oidcproviderId 로 사용합니다.
  2. config 속성( authorizationUrl,tokenUrl,clientId, clientSecret )을 제공합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=keycloak-oidc -s providerId=keycloak-oidc -s enabled=true -s 'config.useJwksUrl="true"' -s config.authorizationUrl=http://localhost:8180/auth/realms/demorealm/protocol/openid-connect/auth -s config.tokenUrl=http://localhost:8180/auth/realms/demorealm/protocol/openid-connect/token -s config.clientId=demo-oidc-provider -s config.clientSecret=secret
OpenID Connect ID 공급자 구성

providerId 특성 값을 oid ccloak OpenID Connect로 설정하는 것을 제외하고 일반 OpenID Connect 공급자를 Keycloak OpenID Connect 공급자를 구성하는 것과 동일한 방식으로 구성합니다.

SAML 2 ID 공급자 구성
  1. samlproviderId 로 사용합니다.
  2. 구성 특성( SingleSignOnServiceUrl,nameIDPolicyFormat, signatureAlgorithm )을 제공합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh create identity-provider/instances -r demorealm -s alias=saml -s providerId=saml -s enabled=true -s 'config.useJwksUrl="true"' -s config.singleSignOnServiceUrl=http://localhost:8180/auth/realms/saml-broker-realm/protocol/saml -s config.nameIDPolicyFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:persistent -s config.signatureAlgorithm=RSA_SHA256
Facebook ID 공급자 구성
  1. facebookproviderId 로 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 이러한 속성은 애플리케이션의 Facebook 개발자 애플리케이션 구성 페이지에서 확인할 수 있습니다. 자세한 내용은 facebook ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=facebook -s providerId=facebook -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=FACEBOOK_CLIENT_ID -s config.clientSecret=FACEBOOK_CLIENT_SECRET
Google ID 공급자 구성
  1. googleproviderId 로 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 이러한 속성은 애플리케이션의 Google 개발자 애플리케이션 구성 페이지에서 확인할 수 있습니다. 자세한 내용은 Google ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=google -s providerId=google -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=GOOGLE_CLIENT_ID -s config.clientSecret=GOOGLE_CLIENT_SECRET
Thunderbird ID 공급자 구성
  1. providerIdtwitter 를 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 이러한 속성은 사용자의 애플리케이션에 대한 Thunderbird 애플리케이션 관리 애플리케이션 구성 페이지에서 확인할 수 있습니다. 자세한 내용은 Thunderbird ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=google -s providerId=google -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=TWITTER_API_KEY -s config.clientSecret=TWITTER_API_SECRET
GitHub ID 공급자 구성
  1. githubproviderId 로 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 애플리케이션의 GitHub Developer Application Settings 페이지에서 이러한 속성을 찾을 수 있습니다. 자세한 내용은 GitHub ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=github -s providerId=github -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=GITHUB_CLIENT_ID -s config.clientSecret=GITHUB_CLIENT_SECRET
iPXE ID 공급자 구성
  1. linkedinproviderId 로 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 이러한 속성은 사용자의 애플리케이션에 대한 TriggerBinding 개발자 콘솔 애플리케이션 페이지에서 찾을 수 있습니다. 자세한 내용은 iPXE ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=linkedin -s providerId=linkedin -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=LINKEDIN_CLIENT_ID -s config.clientSecret=LINKEDIN_CLIENT_SECRET
Microsoft Live ID 공급자 구성
  1. provider Id 로 10.0.0.1을 사용합니다.
  2. 구성 속성 clientIdclientSecret 을 제공합니다. 이러한 속성은 애플리케이션의 Microsoft 애플리케이션 등록 포털 페이지에서 확인할 수 있습니다. 자세한 내용은 Microsoft ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=microsoft -s providerId=microsoft -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=MICROSOFT_APP_ID -s config.clientSecret=MICROSOFT_PASSWORD
Stack Overflow ID 공급자 구성
  1. stackoverflow 명령을 providerId 로 사용합니다.
  2. 구성 속성 clientId,clientSecret, key 를 제공합니다. 애플리케이션의 Stack Apps OAuth 페이지에서 이러한 속성을 찾을 수 있습니다. 자세한 내용은 Stack Overflow ID 브로커 페이지를 참조하십시오.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create identity-provider/instances -r demorealm -s alias=stackoverflow -s providerId=stackoverflow -s enabled=true  -s 'config.useJwksUrl="true"' -s config.clientId=STACKAPPS_CLIENT_ID -s config.clientSecret=STACKAPPS_CLIENT_SECRET -s config.key=STACKAPPS_KEY

18.12. 스토리지 공급자 작업

Kerberos 스토리지 공급자 구성
  1. 구성 요소 끝점에 대해 create 명령을 사용합니다.
  2. realm id를 parentId 속성 값으로 지정합니다.
  3. providerId 특성 값으로 kerberos 를 지정하고 org.keycloak.storage.UserStorageProviderproviderType 특성 값으로 지정합니다.
  4. 예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s parentId=demorealmId -s id=demokerberos -s name=demokerberos -s providerId=kerberos -s providerType=org.keycloak.storage.UserStorageProvider -s 'config.priority=["0"]' -s 'config.debug=["false"]' -s 'config.allowPasswordAuthentication=["true"]' -s 'config.editMode=["UNSYNCED"]' -s 'config.updateProfileFirstLogin=["true"]' -s 'config.allowKerberosAuthentication=["true"]' -s 'config.kerberosRealm=["KEYCLOAK.ORG"]' -s 'config.keyTab=["http.keytab"]' -s 'config.serverPrincipal=["HTTP/localhost@KEYCLOAK.ORG"]' -s 'config.cachePolicy=["DEFAULT"]'
LDAP 사용자 스토리지 공급자 구성
  1. 구성 요소 끝점에 대해 create 명령을 사용합니다.
  2. providerId 특성 값으로 ldap 를 지정하고 org.keycloak.storage.UserStorageProviderproviderType 특성 값으로 지정합니다.
  3. 영역 ID를 parentId 속성 값으로 제공합니다.
  4. 다음 예제를 사용하여 Kerberos 통합 LDAP 공급자를 만듭니다.

    $ kcadm.sh create components -r demorealm -s name=kerberos-ldap-provider -s providerId=ldap -s providerType=org.keycloak.storage.UserStorageProvider -s parentId=3d9c572b-8f33-483f-98a6-8bb421667867  -s 'config.priority=["1"]' -s 'config.fullSyncPeriod=["-1"]' -s 'config.changedSyncPeriod=["-1"]' -s 'config.cachePolicy=["DEFAULT"]' -s config.evictionDay=[] -s config.evictionHour=[] -s config.evictionMinute=[] -s config.maxLifespan=[] -s 'config.batchSizeForSync=["1000"]' -s 'config.editMode=["WRITABLE"]' -s 'config.syncRegistrations=["false"]' -s 'config.vendor=["other"]' -s 'config.usernameLDAPAttribute=["uid"]' -s 'config.rdnLDAPAttribute=["uid"]' -s 'config.uuidLDAPAttribute=["entryUUID"]' -s 'config.userObjectClasses=["inetOrgPerson, organizationalPerson"]' -s 'config.connectionUrl=["ldap://localhost:10389"]'  -s 'config.usersDn=["ou=People,dc=keycloak,dc=org"]' -s 'config.authType=["simple"]' -s 'config.bindDn=["uid=admin,ou=system"]' -s 'config.bindCredential=["secret"]' -s 'config.searchScope=["1"]' -s 'config.useTruststoreSpi=["ldapsOnly"]' -s 'config.connectionPooling=["true"]' -s 'config.pagination=["true"]' -s 'config.allowKerberosAuthentication=["true"]' -s 'config.serverPrincipal=["HTTP/localhost@KEYCLOAK.ORG"]' -s 'config.keyTab=["http.keytab"]' -s 'config.kerberosRealm=["KEYCLOAK.ORG"]' -s 'config.debug=["true"]' -s 'config.useKerberosForPasswordAuthentication=["true"]'
사용자 스토리지 공급자 인스턴스 제거
  1. 스토리지 공급자 인스턴스의 id 속성을 사용하여 구성 요소/ID 와 같은 엔드포인트 URI를 구성합니다.
  2. 이 끝점에 대해 삭제 명령을 실행합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh delete components/3d9c572b-8f33-483f-98a6-8bb421667867 -r demorealm
특정 사용자 스토리지 공급자에 대한 모든 사용자의 동기화 트리거
  1. 스토리지 공급자의 id 속성을 사용하여 user-storage/ID_OF_USER_STORAGE_INSTANCE/sync 와 같은 엔드포인트 URI를 구성합니다.
  2. action=triggerFullSync 쿼리 매개변수를 추가합니다.
  3. create 명령을 실행합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create user-storage/b7c63d02-b62a-4fc1-977c-947d6a09e1ea/sync?action=triggerFullSync
특정 사용자 스토리지 공급자에 대해 변경된 사용자의 동기화 트리거
  1. 스토리지 공급자의 id 속성을 사용하여 user-storage/ID_OF_USER_STORAGE_INSTANCE/sync 와 같은 엔드포인트 URI를 구성합니다.
  2. action=triggerChangedUsersSync 쿼리 매개변수를 추가합니다.
  3. create 명령을 실행합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create user-storage/b7c63d02-b62a-4fc1-977c-947d6a09e1ea/sync?action=triggerChangedUsersSync
LDAP 사용자 스토리지 연결 테스트
  1. testLDAPConnection 엔드포인트에서 get 명령을 실행합니다.
  2. 쿼리 매개변수 bindCredential,bindDn,connectionUrluseTruststoreSpi 를 제공합니다.
  3. action 쿼리 매개변수를 testConnection 로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create testLDAPConnection -s action=testConnection -s bindCredential=secret -s bindDn=uid=admin,ou=system -s connectionUrl=ldap://localhost:10389 -s useTruststoreSpi=ldapsOnly
LDAP 사용자 스토리지 인증 테스트
  1. testLDAPConnection 엔드포인트에서 get 명령을 실행합니다.
  2. 쿼리 매개변수 bindCredential,bindDn,connectionUrluseTruststoreSpi 를 제공합니다.
  3. action 쿼리 매개변수를 testAuthentication 으로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create testLDAPConnection -s action=testAuthentication -s bindCredential=secret -s bindDn=uid=admin,ou=system -s connectionUrl=ldap://localhost:10389 -s useTruststoreSpi=ldapsOnly

18.13. 매퍼 추가

하드 코딩된 역할 LDAP 매퍼 추가
  1. 구성 요소 끝점에서 create 명령을 실행합니다.
  2. providerType 속성을 org.keycloak.storage.ldap.mappers.LDAPStorageMapper 로 설정합니다.
  3. parentId 특성을 LDAP 공급자 인스턴스의 ID로 설정합니다.
  4. providerId 특성을 hardcoded-ldap-role-mapper 로 설정합니다. 역할 구성 매개변수 값을 제공해야 합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s name=hardcoded-ldap-role-mapper -s providerId=hardcoded-ldap-role-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config.role=["realm-management.create-client"]'
MS Active Directory 매퍼 추가
  1. 구성 요소 끝점에서 create 명령을 실행합니다.
  2. providerType 속성을 org.keycloak.storage.ldap.mappers.LDAPStorageMapper 로 설정합니다.
  3. parentId 특성을 LDAP 공급자 인스턴스의 ID로 설정합니다.
  4. providerId 속성을 msad-user-account-control-mapper 로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s name=msad-user-account-control-mapper -s providerId=msad-user-account-control-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea
사용자 속성 LDAP 매퍼 추가
  1. 구성 요소 끝점에서 create 명령을 실행합니다.
  2. providerType 속성을 org.keycloak.storage.ldap.mappers.LDAPStorageMapper 로 설정합니다.
  3. parentId 특성을 LDAP 공급자 인스턴스의 ID로 설정합니다.
  4. providerId 특성을 user-attribute-ldap-mapper 로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s name=user-attribute-ldap-mapper -s providerId=user-attribute-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."user.model.attribute"=["email"]' -s 'config."ldap.attribute"=["mail"]' -s 'config."read.only"=["false"]' -s 'config."always.read.value.from.ldap"=["false"]' -s 'config."is.mandatory.in.ldap"=["false"]'
그룹 LDAP 매퍼 추가
  1. 구성 요소 끝점에서 create 명령을 실행합니다.
  2. providerType 속성을 org.keycloak.storage.ldap.mappers.LDAPStorageMapper 로 설정합니다.
  3. parentId 특성을 LDAP 공급자 인스턴스의 ID로 설정합니다.
  4. providerId 특성을 group-ldap-mapper 로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s name=group-ldap-mapper -s providerId=group-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."groups.dn"=[]' -s 'config."group.name.ldap.attribute"=["cn"]' -s 'config."group.object.classes"=["groupOfNames"]' -s 'config."preserve.group.inheritance"=["true"]' -s 'config."membership.ldap.attribute"=["member"]' -s 'config."membership.attribute.type"=["DN"]' -s 'config."groups.ldap.filter"=[]' -s 'config.mode=["LDAP_ONLY"]' -s 'config."user.roles.retrieve.strategy"=["LOAD_GROUPS_BY_MEMBER_ATTRIBUTE"]' -s 'config."mapped.group.attributes"=["admins-group"]' -s 'config."drop.non.existing.groups.during.sync"=["false"]' -s 'config.roles=["admins"]' -s 'config.groups=["admins-group"]' -s 'config.group=[]' -s 'config.preserve=["true"]' -s 'config.membership=["member"]'
전체 이름 LDAP 매퍼 추가
  1. 구성 요소 끝점에서 create 명령을 실행합니다.
  2. providerType 속성을 org.keycloak.storage.ldap.mappers.LDAPStorageMapper 로 설정합니다.
  3. parentId 특성을 LDAP 공급자 인스턴스의 ID로 설정합니다.
  4. providerId 특성을 full-name-ldap-mapper 로 설정합니다.

    예를 들면 다음과 같습니다.

    $ kcadm.sh create components -r demorealm -s name=full-name-ldap-mapper -s providerId=full-name-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."ldap.full.name.attribute"=["cn"]' -s 'config."read.only"=["false"]' -s 'config."write.only"=["true"]'

18.14. 인증 작업

암호 정책 설정
  1. 영역의 passwordPolicy 특성을 특정 정책 공급자 ID 및 선택적 구성을 포함하는 CloudEvent 표현식으로 설정합니다.
  2. 다음 예제를 사용하여 암호 정책을 기본값으로 설정합니다. 기본값은 다음과 같습니다.

    • 27,500 해시 반복
    • 하나 이상의 특수 문자
    • 하나 이상의 대문자
    • 하나 이상의 숫자 문자
    • 사용자 이름과같지 않음
    • 최소 8자 이상이어야 합니다.

      $ kcadm.sh update realms/demorealm -s 'passwordPolicy="hashIterations and specialChars and upperCase and digits and notUsername and length"'
  3. 기본값과 다른 값을 사용하려면 대괄호로 구성을 전달합니다.
  4. 다음 예제를 사용하여 암호 정책을 다음과 같이 설정합니다.

    • 25,000 해시 반복
    • 두 개 이상의 특수 문자
    • 두 개 이상의 대문자
    • 두 개 이상의 소문자
    • 최소 두 자리 숫자
    • 최소 9자 이상이어야 합니다.
    • 사용자 이름과같지 않음
    • 4개 이상의 변경 사항을 반복할 수 없습니다.

      $ kcadm.sh update realms/demorealm -s 'passwordPolicy="hashIterations(25000) and specialChars(2) and upperCase(2) and lowerCase(2) and digits(2) and length(9) and notUsername and passwordHistory(4)"'
현재 암호 정책 가져오기

passwordPolicy 특성을 제외한 모든 출력을 필터링하여 현재 영역 구성을 가져올 수 있습니다.

예를 들어 demorealm 에 대한 passwordPolicy 를 표시합니다.

$ kcadm.sh get realms/demorealm --fields passwordPolicy
인증 흐름 나열

authentication/flows 끝점에서 get 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get authentication/flows -r demorealm
특정 인증 흐름 가져오기

authentication/flows/FLOW_ID 끝점에서 get 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get authentication/flows/febfd772-e1a1-42fb-b8ae-00c0566fafb8 -r demorealm
흐름 실행 나열

authentication/flows/FLOW_ALIAS/executions 끝점에서 get 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm.sh get authentication/flows/Copy%20of%20browser/executions -r demorealm
실행에 구성 추가
  1. 흐름에 대한 실행을 가져옵니다.
  2. 흐름의 ID를 기록해 둡니다.
  3. authentication/executions/{executionId}/config 끝점에서 create 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm create "authentication/executions/a3147129-c402-4760-86d9-3f2345e401c7/config" -r examplerealm -b '{"config":{"x509-cert-auth.mapping-source-selection":"Match SubjectDN using regular expression","x509-cert-auth.regular-expression":"(.*?)(?:$)","x509-cert-auth.mapper-selection":"Custom Attribute Mapper","x509-cert-auth.mapper-selection.user-attribute-name":"usercertificate","x509-cert-auth.crl-checking-enabled":"","x509-cert-auth.crldp-checking-enabled":false,"x509-cert-auth.crl-relative-path":"crl.pem","x509-cert-auth.ocsp-checking-enabled":"","x509-cert-auth.ocsp-responder-uri":"","x509-cert-auth.keyusage":"","x509-cert-auth.extendedkeyusage":"","x509-cert-auth.confirmation-page-disallowed":""},"alias":"my_otp_config"}'
실행을 위한 구성 가져오기
  1. 흐름에 대한 실행을 가져옵니다.
  2. 구성 ID가 포함된 authenticationConfig 속성을 기록해 둡니다.
  3. authentication/config/ID 엔드포인트에서 get 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm get "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm
실행 구성 업데이트
  1. 흐름에 대한 실행을 가져옵니다.
  2. 흐름의 authenticationConfig 특성을 가져옵니다.
  3. 속성의 구성 ID를 기록해 둡니다.
  4. authentication/config/ID 엔드포인트에서 update 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm update "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm -b '{"id":"dd91611a-d25c-421a-87e2-227c18421833","alias":"my_otp_config","config":{"x509-cert-auth.extendedkeyusage":"","x509-cert-auth.mapper-selection.user-attribute-name":"usercertificate","x509-cert-auth.ocsp-responder-uri":"","x509-cert-auth.regular-expression":"(.*?)(?:$)","x509-cert-auth.crl-checking-enabled":"true","x509-cert-auth.confirmation-page-disallowed":"","x509-cert-auth.keyusage":"","x509-cert-auth.mapper-selection":"Custom Attribute Mapper","x509-cert-auth.crl-relative-path":"crl.pem","x509-cert-auth.crldp-checking-enabled":"false","x509-cert-auth.mapping-source-selection":"Match SubjectDN using regular expression","x509-cert-auth.ocsp-checking-enabled":""}}'
실행을 위한 구성 삭제
  1. 흐름에 대한 실행을 가져옵니다.
  2. flows authenticationConfig 특성을 가져옵니다.
  3. 속성의 구성 ID를 기록해 둡니다.
  4. authentication/config/ID 엔드포인트에서 delete 명령을 실행합니다.

예를 들면 다음과 같습니다.

$ kcadm delete "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm

법적 공지

Copyright © 2021 Red Hat, Inc.
Apache License, 버전 2.0 (License")에 따라 라이센스가 부여되었으며 라이센스 준수를 제외하고 이 파일을 사용할 수 없습니다. 다음에서 라이센스 사본을 받을 수 있습니다.
관련 법률에서 요구하거나 서면으로 동의한 경우를 제외하고, 라이센스 하에 배포된 소프트웨어는 "AS IS" BASIS, skopeoOUT WARRANTIES OR CONDITIONS OF ANY KIND에 배포됩니다. 라이센스 아래의 특정 언어 관리 권한 및 제한 사항에 대한 라이선스를 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.