12장. OpenID Connect 통합
3scale은 다음 기능과 함께 OpenID Connect 사양을 사용하여 API 요청을 인증하기 위해 타사 IdM(Identity Providers)과 통합됩니다.
- OpenID Connect는 OAuth 2.0 인증 프레임워크를 인증 메커니즘으로 보완하는 OAuth 2.0을 기반으로 합니다.
- OpenID Connect 인증 옵션을 사용하면 JST(JSON 웹 토큰) 형식의 액세스 토큰을 사용하여 API 요청이 인증됩니다(RF7519).
통합은 다음 두 부분으로 구성됩니다.
Red Hat 3scale API Management는 OpenID 공급자 역할을 하는 RH -SSO(Red Hat Single Sign-On )와의 통합 지점을 모두 지원합니다. 지원되는 구성 페이지에서 지원되는 RH-SSO 버전을 참조하십시오. APIcast 통합은 ForgeRock 에서도 테스트됩니다.
두 경우 모두 OpenID Connect 인증 옵션을 사용하여 서비스의 통합 페이지에 있는 APIcast Configuration에 OpenID Connect Issuer 필드를 지정하여 통합을 구성할 수 있습니다. 자세한 내용은 3scale with Red Hat Single Sign-On 을 참조하십시오.
12.1. JWT 확인 및 APIcast의 구문 분석
OpenID Connect 인증 모드를 사용하여 서비스에 대한 API 요청은 OpenID 공급자가 발행한 JWT 형식으로 Bearer
스키마를 사용하여 인증
헤더에 액세스 토큰을 제공해야 합니다. 헤더는 다음 예와 같이 표시되어야 합니다.
Authorization: Bearer <JWK>
예제:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6ImFiYzEyMyIsIm5iZiI6MTUzNzg5MjQ5NCwiZXhwIjoxNTM3ODk2MDk0LCJpYXQiOjE1Mzc4OTI0OTQsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiQmVhcmVyIn0.LM2PSmQ0k8mR7eDS_Z8iRdGta-Ea-pJRrf4C6bAiKz-Nzhxpm7fF7oV3BOipFmimwkQ_-mw3kN--oOc3vU1RE4FTCQGbzO1SAWHOZqG5ZUx5ugaASY-hUHIohy6PC7dQl0e2NlAeqqg4MuZtEwrpESJW-VnGdljrAS0HsXzd6nENM0Z_ofo4ZdTKvIKsk2KrdyVBOcjgVjYongtppR0cw30FwnpqfeCkuATeINN5OKHXOibRA24pQyIF1s81nnmxLnjnVbu24SFE34aMGRXYzs4icMI8sK65eKxbvwV3PIG3mM0C4ilZPO26doP0YrLfVwFcqEirmENUAcHXz7NuvA
JWT 토큰에는 토큰 수신자가 알려진 발행자가 토큰을 확인하고 서명했는지 그리고 해당 콘텐츠가 변경되지 않았는지 확인할 수 있는 서명이 포함되어 있습니다. 3scale은 공개/개인 키 쌍을 기반으로 RSA 서명을 지원합니다. 여기서 발행자는 개인 키를 사용하여 JWT 토큰에 서명합니다. APIcast는 공개 키를 사용하여 이 토큰을 확인합니다.
APIcast는 JWT 서명을 확인하는 데 사용할 수 있는JWK(JSON 웹 키)를 가져오기 위해 OpenID Connect Discovery 를 사용합니다.
각 요청에서 APIcast는 다음을 수행합니다.
- 공개 키를 사용하여 JWT 토큰을 확인합니다.
-
클레임
nbf
및exp의 유효성을 검사합니다
. -
클레임에 지정된
발행자가
OpenID Connect 발급자 필드에 구성된 것과 같은지 확인합니다. -
azp 또는 a
ud
클레임 값을 추출하고 3scale에서 애플리케이션을 식별하는 클라이언트 ID로 사용하여 서비스 관리 API를 통해 호출을 인증합니다.
JWT 검증 또는 권한 부여 확인에 실패하는 경우 APIcast는 Authenication 실패 오류를 반환합니다. 그렇지 않으면 APIcast에서 API 백엔드에 대한 요청을 프록시합니다. Authorization
헤더는 요청에 남아 있으므로 API 백엔드에서 JWT 토큰을 사용하여 사용자 및 클라이언트 ID를 확인할 수도 있습니다.