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가 있어야 합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.