OpenID Connect SSO 개요
OpenID Connect(OIDC)는 주요 기술 회사에서 채택한 OAuth 2.0 기반 인증 프로토콜입니다.
기본 SSO
선택한 기능에 관계없이 기본 SSO의 설정 요구 사항은 동일합니다. 로열티 또는 신용카드 구현을 추가하려면 추가 정보가 필요합니다.
설정 요구 사항
템플릿 사이트에 대한 OIDC SSO 액세스를 올바르게 설정하려면 다음과 같이 몇 가지 사항이 필요합니다.
- API(권한 부여, 토큰, userProfile, JWKS)
- ClientId
- 클라이언트 암호
- ResponseMode
- isNonceEnabled
- customerDetailsAPIKey(사용 가능한 경우)
권한 부여 흐름

엔드포인트 인증
GET /authorize 엔드포인트는 인증 및 승인에 사용됩니다. 사용자가 로그인하면 권한 부여 또는 코드를 반환합니다. 인증을 위해 자격 증명을 제출하도록 안내하는 브라우저 리디렉션입니다.
요청 매개변수
| 매개변수 | 설명 | 데이터 유형 | 샘플 값 | 필수 여부 |
|---|---|---|---|---|
client_id | 클라이언트를 식별합니다. IDP(ID 공급자)에 사전 등록된 값과 일치해야 합니다. 수동 클라이언트 등록 중에 또는 동적 클라이언트 등록 API를 통해 얻습니다. | String | 예 | |
nonce | 재전송 공격을 완화하는 데 사용됩니다. 이 값은 ID 토큰으로 반환됩니다. | String | 예 | |
prompt | 검증에 필요한 상호 작용 유형입니다. "비어 있음"이면 사용자가 아직 인증되지 않은 경우 로그인해야 합니다. '없음'인 경우 IDP는 로그인 메시지를 표시하지 않지만 로그인한 경우 인증 코드를 반환하고 그렇지 않은 경우 오류를 반환합니다. | String | 유효한 값: 없음 또는 비어 있음 | — |
redirect_uri | 인증 코드 또는 토큰을 전송해야 하는 콜백 위치입니다. 클라이언트 등록 시 IDP에 사전 등록된 값과 일치해야 합니다. | String | 예 | |
response_type | code(IDP) 값입니다. | String | 예 | |
response_mode | 승인 응답이 반환되는 방법입니다. | String | 유효한 값: query | — |
scope | 프로필 세부 정보를 가져오는 데 사용되는 액세스 토큰입니다. 인증 요청에 필요합니다. | String | OpenID, profile, email | 예 |
state | 상호 작용의 상태입니다. 이 값은 토큰으로 반환되며, 사용자는 이를 통해 클릭하고 인증을 받고, 원래 관심을 가졌던 페이지로 돌아갈 수 있습니다. 값에는 영숫자, 쉼표, 마침표, 밑줄, 하이픈 문자가 포함될 수 있습니다. | String | 예 | |
ui_locales | 사용자가 선호하는 사용자 인터페이스 언어 및 스크립트. | String | en_CA, fr_CA | — |
audience | 의도된 수신자입니다. | String | 파트너에 의해 정의 | — |
응답 매개변수
| 매개변수 | 설명 | 데이터 유형 | 필수 여부 |
|---|---|---|---|
code | 클라이언트를 식별하는 인증 코드입니다. IDP에 사전 등록된 값과 일치해야 합니다. 수동 클라이언트 등록 중에 또는 동적 클라이언트 등록 API를 통해 얻습니다. | String | 예 |
state | 상호 작용의 상태입니다. 이 값은 토큰으로 반환되며, 사용자는 이를 통해 클릭하고 인증을 받고, 원래 관심을 가졌던 페이지로 돌아갈 수 있습니다. 값에는 영숫자, 쉼표, 마침표, 밑줄, 하이픈 문자가 포함될 수 있습니다. | String | 예 |
샘플 인증 URL
https://example.com/authorize?client_id={clientID}&response_type=code&state=d6b93799-404b-4205-9bb3-c579b1180428&scope=openid email profile&nounce=234567687867&redirect_uri=https://{ExpediaDomain}/sso/auth샘플 콜백 URL
https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428토큰 엔드포인트
POST /token엔드포인트는 권한 부여 또는 코드를 제시하여 액세스 토큰과 ID 토큰을 얻는 데 사용되는 백엔드 API 호출입니다.
요청 매개변수
| 매개변수 | 설명 | 데이터 유형 | 필수 여부 |
|---|---|---|---|
grant_type | IDP가 토큰 생성을 승인하는 데 사용하는 메커니즘입니다. 값: authorization_code | String | 예 |
redirect_uri | 승인이 전송된 콜백 위치를 지정합니다. 이 값은 원래 authorization_code 생성에 사용되는 redirect_uri와 일치해야 하며, 그렇지 않으면 토큰 엔드포인트가 실패합니다. | String | 예 |
code | /authorize 호출 응답에서 받은 클라이언트 식별 코드입니다. | String | 예 |
요청 헤더
| 필드 | 설명 | 데이터 유형 | 샘플 값 | 필수 여부 |
|---|---|---|---|---|
accept | "application/json"이어야 합니다. | String | application/json | 예 |
authorization | 클라이언트 ID와 암호를 Base64로 인코딩합니다. HTTP 승인 헤더에 인코딩된 정보를 사용합니다. | String | Basic<Base64로 인코딩된 클라이언트 ID 및 암호> | 예 |
Content-Type | "application/x-www-form-urlencoded"여야 합니다. | String | application/x-www-form-urlencoded | 예 |
응답 매개변수
| 필드 | 설명 | 데이터 유형 |
|---|---|---|
access_token | 액세스 토큰 | String |
token_type | 토큰의 대상 | String |
expires_in | 액세 스 토큰의 만료 시간(초) | Integer |
scope | 액세스 토큰에 포함된 범위 | String |
id_token | OpenID 범위가 부여된 경우 반환되는 식별자 | String |
ID_token
ID_token은 클레임이라는 인증 정보가 포함된 JSON 웹 토큰(JWT)입니다. Expedia 템플릿 솔루션은 아래 표와 같이 header, payload, signature 클레임을 사용합니다.
헤더 클레임
| 필드 | 설명 | 데이터 유형 | 필수 여부 |
|---|---|---|---|
alg | 사용된 디지털 서명 알고리즘 식별(항상 RS256) | String | — |
kid | 키 ID: ID 토큰을 확인하는 데 사용되는 공개 키 식별. 해당 공개 키는 JSON 웹 키 세트(JWKS)를 통해 찾을 수 있습니다. | String | 예 |
페이로드 클레임
| 필드 | 설명 | 데이터 유형 | 필수 여부 |
|---|---|---|---|
amr | 인증 방법에 대한 식별자인 JSON 문자열 배열 | Array | — |
aud | 이 ID 토큰이 의도한 대상 식별(애플리케이션의 OAuth 2.0 클라이언트 ID 중 하나) | String | 예 |
auth_time | 최종 사용자가 인증된 시간, Unix 시간(초)으로 표현됨 | Integer | — |
exp | ID 토큰이 만료되는 시간, Unix 시간(초)으로 표현됨 | Integer | 예 |
iat | ID 토큰이 발행된 시간, Unix 시간(초)으로 표현됨 | Integer | — |
idp | ID 공급자의 지표 | String | 예 |
iss | 이 ID 토큰을 발행한 승인 서버의 URL | String | — |
jti | 디버깅 및 해지 목적을 위한 이 ID 토큰에 대한 고유 식별자 | String | 예 |
sub | 승인 호출의 주체(사용자)에 대한 고유 식별자 | String | — |
ver | ID 토큰의 의미 체계 버전 | Integer | 예 |
서명 클레임
서명 유효성 검사: 서명은 해당 JWKS endpoint및 알고리즘에 대해 적절한 키( client_id)를 사용하여 검색된 키에 대해 유효성을 검사합니다.