OIDC (OpenID Connect)
- OAuth 2.0을 기반으로 한 통합 인증 시스템 및 프로토콜이다.
- OIDC는 OAuth 2.0의 위에 추가되는 Layer로,
OAuth 2.0과 함께 사용되어 사용자의 정보를 인증하고 안전히 관리하며 권한을 부여한다.
- OIDC와 OAuth 2.0을 통해 사용자는 Third-Party에서 간편히 인증하고 권한을 부여받을 수 있다.
- OIDC에서는 사용자의 ID를 인증하기 위해 ID Token 개념을 사용한다.
* Access Token: 리소스에 접근하기 위한 토큰
* ID Token: 사용자 정보에 접근하기 위한 토큰
OIDC Flow (High-Level Abstraction)
- Client가 사용자의 정보를 받아오기 위해 Authorization Server에
Authorization Code, Client ID, Client Secret(암호)을 전송한다.
- 이때, Client는 Authorization Endpoint에 전송하는 Request Parameter에
\(\texttt{response_type}\)을 반드시 명시해야 한다.
- \(\texttt{response_type}\)은 \(\texttt{code}\) 혹은 \(\texttt{token}\) 타입을 지정할 수 있는데,
OIDC에서는 특히 \(\texttt{id_token}\) 타입으로 지정해야 하며
\(\texttt{scope}\) Parameter를 \(\texttt{openid}\) 로 설정해야 한다.
(\(\texttt{openid}\)로 설정하지 않으면 ID Token이 발행되지 않는다. - Authorization Server는 Client에게
권한 부여를 위한 Access Token과 사용자 인증을 위한 ID Token을 전송한다.
OIDC Token
- End-User들에 대한 세부적인 정보가 저장되어 있는 토큰으로, 인증에 사용된다.
- JSON Web Token (JWT) 형태로 구현된다.
- Header, Payload, Signature가 함께 인코딩되어 클라이언트에 전달된다.
(사용자의 정보는 Payload에 저장된다.)
OIDC Token Payload
iss (토큰 발행인) |
sub (구분자) |
aud | nonce |
exp (토큰 만료시간) |
iat (토큰 발행시간) |
name (사용자 성명) |
given_name (사용자 이름) |
family_name (사용자 성) |
gender (사용자 성별) |
birthdate (사용자 생일) |
email (사용자 이메일) |
picture (사용자 사진) |
- 클라이언트가 위보다 더 많은 정보를 필요로 할 경우,
Request시, \(\texttt{scope}\) Parameter에 더 많은 정보를 Claim할 수 있다.
Example. Payload in OIDC Token
{
"iss": "http://server.example.com",
"sub": "248289761001",
"aud": "s6BhdRkqt3",
"nonce": "n-0S6_WzA2Mj",
"exp": 1311281970,
"iat": 1311280970,
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"gender": "female",
"birthdate": "0000-10-31",
"email": "janedoe@example.com",
"picture": "http://example.com/janedoe/me.jpg"
}
OIDC \(\texttt{reponse_type}\)
- Client가 Server로부터 사용자 정보를 불러오는 과정을
Parameter설정에 따른 차이를 중심으로 설명한다.
1. | |
openid를 scope에 포함한 상태에서 response_type을 code로 지정한 경우 |
|
openid를 scope에 포함하지 않은 상태에서 response_type을 code로 지정한 경우 |
|
response_type을 token로 지정한 경우 | |
response_type을 id_token로 지정한 경우 |
Reference: OpenID, URL, 2022.04.29 검색
Reference: 2022학년도 1학기 홍익대학교 네트워크 보안 강의, 이윤규 교수님