Spring Security ‐ Open ID Connect - dnwls16071/Backend_Summary GitHub Wiki
📚 Open ID Connect
- OpenID Connect 1.0은 OAuth 2.0 프로토콜 위에 구축된 ID 계층으로 OAuth 2.0을 확장하여 인증 방식을 표준화 한 OAuth 2.0 기반의 인증 프로토콜이다.
- scope 지정 시 "openid"를 포함하면 OpenID Connect 사용이 가능하며 인증에 대한 정보는 ID 토큰이라고 하는 Json 웹 토큰(JWT)으로 반환된다.
- OpenID Connect는 클라이언트가 사용자 ID를 확인할 수 있게 하는 보안 토큰인 ID Token을 제공한다.
OpenID Connect Discovery 1.0 Provider Metadata
- OpenID Connect를 사용하기 위해 필요한 모든 엔드 포인트 및 공개 키 위치 정보를 포함해 OpenID 공급자의 구성에 대한 클레임 집합을 나타낸다.
📚 ID Token & Scope
- ID Token은 사용자가 인증되었음을 증명하는 결과물로 OIDC 요청 시 access token과 함께 클라이언트에게 전달되는 토큰이다.
- ID Token은 JWT로 표현되며 헤더, 페이로드, 서명으로 구성된다.
- ID Token은 개인 키로 발급자가 서명하는 것으로서 토큰의 출처를 보장하고 변조되지 않았음을 보장한다.
- 애플리케이션은 공개 키로 ID Token을 검증 및 유효성을 검사하고 만료 여부 등 토큰의 클레임을 확인한다.
- 클라이언트는 클레임 정보에 포함되어 있는 사용자명, 이메일을 활용하여 인증 관리를 할 수 있다.
ID Token vs Access Token
- ID Token은 API 요청에 사용해선 안되며 사용자 신원확인을 위해서만 사용되어져야 한다.
- Access Token은 인증을 위해 사용해선 안되며 리소스에 접근하기 위해서 사용되어져야 한다.
OIDC Scope
| scope | 설명 |
|---|---|
| openid | 필수값, 클라이언트가 OpenID Connect 요청을 하고 있음을 인증 서버에 알린다. |
| profile | 기본 프로필 클레임에 대한 액세스 요청 |
| 이메일 및 이메일 검증 클레임에 대한 액세스 요청 | |
| address | 주소 클레임에 대한 액세스 요청 |
| phone | 전화번호 및 전화번호 검증 클레임에 대한 액세스 요청 |
OIDC 로그인 요청
- OIDC 상호 작용 행위자 - OpenID Provider
- OP라고 하며 OpenID 제공자로서 최종 사용자를 인증하고 인증 결과와 사용자에 대한 정보를 신뢰 당사자에게 제공할 수 있는 OAuth 2.0 서버를 말한다.
- OIDC 상호 작용 행위자 - Relying Party
- RP라고 하며 신뢰 당사자로서 인증 요청을 처리하기 위해 OP에 의존하는 OAuth 2.0 애플리케이션을 말한다.
- RP는 OP에 권한 부여 요청을 보낸다.
- OP는 최종 사용자를 인증하고 권한을 얻는다.
- OP는 ID Token과 Access Token으로 응답한다.
- RP는 Access Token을 사용해 UserInfo 엔드포인트에 요청을 보낼 수 있다.
- UserInfo 엔드포인트는 최종 사용자에 대한 클레임을 반환한다.
OIDC 로그인 요청 - 매개변수 요청 및 응답
- 요청 시 openid 범위를 scope 매개변수에 포함해야 한다.
- response_type 매개변수는 id_token을 포함한다.
- 요청은 nonce 매개변수를 포함해야 한다.
- 요청에 포함되는 값으로서 결과 id_token 값에 클레임으로 포함되며 이것은 토큰의 재생 공격을 방지하고 요청의 출처를 식별하는 데 사용되는 임의의 고유 문자열이다.
- 해당 nonce 클레임에는 요청에서 전송된 것과 정확히 동일한 값이 포함되어야 한다. 그렇지 않은 경우 애플리케이션에서 인증을 거부한다.