728x90
ID Token
- ID 토큰은 사용자가 인증 되었음을 증명하는 결과물로서 OIDC 요청 시 access token 과 함께 클라이언트에게 전달되는 토큰이다
- Access 토큰 자체는 인증이 되었다는 것을 증빙할 순 없지만, ID 토큰과 같이 전달이 되면 인증되었음을 증명할 수 있다.
- ID 토큰은 JWT(JSON 웹 토큰)으로 표현되며 헤더, 페이로드 및 서명으로 구성된다
- ID 토큰은 개인 키로 발급자가 서명하는 것으로서 토큰의 출처를 보장하고 변조되지 않았음을 보장한다.
- 어플리케이션은 공개 키로 ID 토큰을 검증 및 유효성을 검사하고 만료여부 등 토큰의 클레임을 확인 한다 -> 인증 처리
- 클라이언트는 클레임 정보에 포함되어 있는 사용자명, 이메일을 활용하여 인증 관리를 할 수 있다
ID Token vs Access Token

- ID Token 은 API 요청에 사용해서는 안되며 사용자의 신원확인을 위해 사용되어야 한다
- Access Token 은 인증을 위해 사용해서는 안되며 리소스에 접근하기 위해 사용되어져야 한다
OIDC Scope
| scope | |
| openid(필수) | 클라이언트가 OpenID Connect 요청을 하고 있음을 인증 서버에 알린다 |
| profile | 기본 프로필 클레임에 대한 액세스 요청 |
| 이메일 및 email_verified 클레임에 대한 액세스 요청 | |
| address | 주소 클레임에 대한 액세스 요청 |
| phone | phone_number 및 phone_number_verified 클레임에 대한 액세스 요청 |

OIDC 로그인 요청
OIDC 상호 작용 행위자
- OpenID Provider
- 줄여서 OP 라고 하며 OpenID 제공자로서 최종 사용자를 인증하고 인증 결과와 사용자에 대한 정보를 신뢰 당사자에게 제공할 수 있는 Oauth 2.0 서버를 의미한다
- Relying Party
- 줄여서 RP 라고 하며 신뢰 당사자로서 인증 요청을 처리하기 위해 OP에 "의존"하는 Oauth 2.0 애플리케이션을 의미한다
- RP는 OP에 권한 부여 요청을 보낸다.
- OP는 최종 사용자를 인증하고 권한을 얻는다.
- OP는 ID 토큰과 액세스 토큰으로 응답한다.
- RP는 Access Token을 사용하여 UserInfo 엔드포인트에 요청을 보낼 수 있다.
- UserInfo 엔드포인트는 최종 사용자에 대한 클레임을 반환한다.
OIDC 로그인 요청
매개변수 요청 및 응답

- 요청 시 openid 범위를 scope 매개 변수에 포함해야 한다.
- response_type 매개 변수는 id_token을(를) 포함 한다. (response_type 이 해당 토큰을 지원해야 한다)
- 요청은 nonce 매개 변수를 포함해야 한다. (Implicit Flow 인 경우 필수)
- 요청에 포함되는 값으로서 결과 id_token 값에 클레임으로 포함되며 이것은 토큰의 재생 공격을 방지하고 요청의 출처를 식별하는 데 사용할 수 있는 임의의 고유 문자열이다.
- 해당 nonce 클레임에는 요청에서 전송된 것과 정확히 동일한 값이 포함되어야 합니다. 그렇지 않은 경우 애플리케이션에서 인증을 거부해야 한다
Test


- 실행시 id_token을 발급받으며, 해당 토큰을 통해 얻은 정보를 https://jwt.io/ 에서 decode 할 수 있다.
- decode 해서 얻은 값을 통해 애플리케이션에서 한번 더 인증 처리를 진행하면 된다.
- id_token은 Resource-server를 접근하기 위한 목적으로 생성된 것이 아니기 때문에 해당 정보로 리소스서버는 접근할 수 없다.
- id_token을 통해 공개키로 받을 때에는 nonce 필드를 추가해야 한다
728x90
'스프링 시큐리티 OAuth2 > OAuth 2.0 Open ID Connect, Client' 카테고리의 다른 글
| 스프링 시큐리티와 OAuth 2.0 (0) | 2023.01.13 |
|---|---|
| OAuth 2.0 Open ID Connect - 개요 및 특징 (0) | 2023.01.13 |