12.7. OpenID Connect ID 공급자와 3scale 통합의 예
이 예에서는 Red Hat Single Sign-On(RH-SSO)과 OpenID Connect ID 공급자로 3scale을 통합할 때 흐름을 보여줍니다. 이 예제에는 다음과 같은 특성이 있습니다.
- 관리 포털에서 API 공급자는 3scale API 제품을 정의하고 RH-SSO를 OpenID Connect ID 공급자로 사용하도록 구성했습니다.
이 제품의 OpenID Connect 구성은 다음과 같습니다.
-
공개 기본 URL:
https://api.example.com
-
개인 기본 URL:
https://internal-api.example.com
-
OpenID Connectsuer:
https://zync:/auth/realms/myrealm
- 표준 흐름인 권한 부여 코드 흐름이 선택됩니다. Authorization Code Flow, which is the standard flow, is selected.
-
공개 기본 URL:
3scale 개발자 포털에는 다음과 같은 특성이 있는 애플리케이션이 있습니다. 이 애플리케이션은 API 소비자가 개발자 포털의 특정 애플리케이션 계획에서 제공하는 3scale API 제품에 대한 액세스를 구독한 결과입니다.
-
클라이언트 ID:
myclientid
-
클라이언트 시크릿:
myclientsecret
-
리디렉션 URL:
https://myapp.example.com
-
클라이언트 ID:
RH-SSO에서는
myrealm
영역에 다음과 같은 특성을 가진 클라이언트가 있습니다.-
클라이언트 ID:
myclientid
-
클라이언트 시크릿:
myclientsecret
-
리디렉션 URL:
https://myapp.example.com
-
클라이언트 ID:
myrealm
영역에는 이 사용자가 있습니다.-
사용자 이름:
myuser
-
암호:
mypassword
-
사용자 이름:
-
myrealm
의 3scale Zync 클라이언트에는 올바른 서비스 계정 역할이 있습니다.
흐름은 다음과 같습니다.
최종 사용자(API 소비자)는 다음 끝점에서 이 예제에서 인증 서버 RH-SSO로 권한 부여 요청을 보냅니다.
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/auth
요청에서 애플리케이션은 다음 매개변수를 제공합니다.
-
클라이언트 ID:
myclientid
-
리디렉션 URL:
https://myapp.example.com
-
클라이언트 ID:
- 애플리케이션은 end-user를 RH-SSO 로그인 창에서 리디렉션합니다.
다음 인증 정보를 사용하여 RH-SSO에 최종 사용자 로그인:
-
사용자 이름:
myuser
-
암호:
mypassword
-
사용자 이름:
- 구성에 따라 및 이 특정 애플리케이션에서 최종 사용자가 처음 인증하는 경우 동의 창이 표시될 수 있습니다.
- RH-SSO는 최종 사용자에게 권한 부여 코드를 발행합니다.
API 소비자 애플리케이션은 다음 끝점을 사용하여 JWT에 대한 권한 부여 코드를 교환하는 요청을 보냅니다.
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/token
요청에는 권한 부여 코드와 이러한 매개변수가 포함됩니다.
-
클라이언트 ID:
myclientid
-
클라이언트 시크릿:
myclientsecret
-
리디렉션 URL:
https://myapp.example.com
.
-
클라이언트 ID:
-
RH-SSO는
eyJhbGciOiJSUzI1NiIsInR5cCIgiAiAiSldUIiwia2lk BenxBArNhqF-A
와 같은 access_token 필드가 있는 JSON 웹 토큰(JWT)을 반환합니다. API 소비자 애플리케이션은 다음과 같은 헤더를 사용하여
https://api.example.com
에 API 요청을 보냅니다.Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.
-
이 애플리케이션에는
https://internal-api.example.com
로부터 성공적인 응답을 수신해야 합니다.