7.3. 외부 토큰 교환에 대한 내부 토큰
외부 ID 공급자에 의해 Mint된 외부 토큰의 영역 토큰을 교환할 수 있습니다. 이 외부 ID 공급자는 관리 콘솔의 ID 공급자 섹션에서 구성해야 합니다. 현재 OAuth/OpenID Connect 기반 외부 ID 공급자만 지원되며 여기에는 모든 소셜 공급자가 포함됩니다. Red Hat Single Sign-On은 외부 공급자에게 백채널 교환을 수행하지 않습니다. 따라서 계정이 연결되지 않으면 외부 토큰을 가져올 수 없습니다. 이러한 조건 중 하나를 충족하려면 외부 토큰을 충족해야 합니다.
- 사용자가 외부 ID 공급자를 한 번 이상 로그인해야 합니다.
- 사용자는 사용자 계정 서비스를 통해 외부 ID 공급자와 연결되어 있어야 합니다.
- 사용자 계정은 Client Initiated Account Linking API를 사용하여 외부 ID 공급자를 통해 연결됩니다.
마지막으로, 외부 ID 공급자가 토큰을 저장하도록 구성되었거나 위의 작업 중 하나를 교환하는 내부 토큰과 동일한 사용자 세션을 사용하여 수행해야 합니다.
계정이 연결되지 않은 경우 교환 응답에는 이를 설정하는 데 사용할 수 있는 링크가 포함됩니다. 이 내용은 요청 구성 섹션에서 자세히 설명합니다.
7.3.1. 교환에 대한 권한 부여 링크 복사링크가 클립보드에 복사되었습니다!
외부 토큰 교환 요청 내부에서는 호출 클라이언트가 외부 ID 공급자와 토큰을 교환할 수 있는 권한을 부여할 때까지 403, Forbidden 응답이 거부됩니다. 클라이언트에 권한을 부여하려면 ID 공급자의 구성 페이지로 이동하여 권한 탭으로 이동합니다.
ID 공급자 권한
절차
사용 권한 활성화를 ON 으로 전환합니다.
ID 공급자 권한
페이지에 token-exchange 링크가 표시됩니다.
링크를 클릭하여 권한 정의를 시작합니다.
설정 페이지가 나타납니다.
ID 공급자 교환 권한 설정
Authorization 링크를 클릭하고 Policies 탭으로 이동하여 클라이언트 정책을 생성합니다.
클라이언트 정책 생성
- 토큰 교환을 요청하는 인증된 클라이언트인 시작 클라이언트를 입력합니다.
ID 공급자의 token-exchange 권한으로 돌아가 방금 정의한 클라이언트 정책을 추가합니다.
클라이언트 정책 적용
이제 클라이언트에서 호출할 수 있는 권한이 있습니다. 이 작업을 올바르게 수행하지 않으면 교환을 시도하면 403 Forbidden 응답이 표시됩니다.
7.3.2. 요청하기 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트가 기존 내부 토큰을 외부 토큰으로 교환하는 경우 requested_issuer 매개변수를 제공합니다. 매개변수는 구성된 ID 공급자의 별칭이어야 합니다.
curl -X POST \
-d "client_id=starting-client" \
-d "client_secret=the client secret" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
-d "subject_token=...." \
--data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \
-d "requested_issuer=google" \
http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token
subject_token 매개변수는 대상 영역의 액세스 토큰이어야 합니다. requested_token_type 매개변수는 urn:ietf:params:oauth:token-type:access_token 또는 비어 있어야 합니다. 현재 요청한 다른 토큰 유형은 지원되지 않습니다. 이 호출에서 반환된 JSON 응답의 예는 다음과 같습니다.
{
"access_token" : "....",
"expires_in" : 3600
"account-link-url" : "https://...."
}
어떤 이유로 외부 ID 공급자가 연결되지 않은 경우 다음 JSON 문서와 함께 HTTP 400 응답 코드를 받습니다.
{
"error" : "....",
"error_description" : "..."
"account-link-url" : "https://...."
}
오류 클레임은 token_expired 또는 not_linked 입니다. 클라이언트가 클라이언트 시작 계정 연결을 수행할 수 있도록 account-link-url 클레임이 제공됩니다. 대부분의 공급업체는 브라우저 OAuth 프로토콜을 통해 연결해야 합니다. account-link-url 을 사용하여 redirect_uri 쿼리 매개변수를 추가하고 브라우저를 전달하여 링크를 수행할 수 있습니다.