Open ID Connect 에 대해서 공부하면서 이것저것 찾아본것을 정리해 보았다.
1. OpenID Connect 란?
- OpenID Connect 는 Oauth 2.0을 확장해서 개발 되었다.
- OpenID Connect 는 openid라는 scope 값을 포함해서 Authorization Request를 보내며 인증(Authentication) 에 대한 정보는 ID Token 이라고 불리는 JSON Web Token(JWT) 을 리턴해준다. (scope에 openid 를 무조건 포함해야 하는지는 좀 헷갈린다.. )
- OpenID Provider (OP) : End-User 를 인증하고 인증이벤트 및 End-User에 대한 당사지에게 클레임을 제공할수 있는 Oauth 2.0 인증서버 (원문 : OAuth 2.0 Authorization Server that is capable of Authenticating the End-User and providing Claims to a Relying Party about the Authentication event and the End-User. )
2. ID Token
- ID Token 은 End-User의 인증에 대한 Claims 를 담고 있는 암호화 된 토큰이다. ID Token 은 JSON Web Token(JWT) 로 표현된다.
타입 |
필수여부 |
설명 |
iss |
Required |
ID Token 발급에 대한 고유 식별값. host, port 등이 포함되기도 한다. |
sub | Required | End-User 에 대한 고유한 값 |
aud | Required | ID Token 과 관련된 청중, client_id 와 관련이 있다. |
exp | Required | 토큰 만료 시간 |
iat | Required | JWT 를 발행한 시간 |
auth_time | Required/Optional | End-User에 대한 인증이 일어난 시간. |
nonce |
| |
acr | Optional | Authentication Context Class Reference. |
amr | Optional | Authentication Method Reference. |
azp |
Optional |
Authorized Party. |
Json Object 예시
{
"iss": "https://server.example.com",
"sub": "24400320",
"aud": "s6BhdRkqt3",
"nonce": "n-0S6_WzA2Mj",
"exp": 1311281970,
"iat": 1311280970,
"auth_time": 1311280969,
"acr": "urn:mace:incommon:iap:silver"
}
3. OpenID Connect Authentication Flow
OepnID Connect Authentication 흐름에는 3가지 종류가 있다.
- Authorization Code Flow
- Implicit Flow
- Hybrid Flow
Property |
Authorization Code Flow |
Implicit Flow |
Hybrid Flow |
All tokens returned from Authorization Endpoint |
NO |
YES |
NO |
All tokens returned from Token Endpoint |
YES |
NO |
NO |
Tokens not revealed to User Agent |
YES |
NO |
NO |
Client can be authenticated |
YES |
NO |
YES |
Refresh Token possible |
YES |
NO |
YES |
Communication in one round trip |
NO |
YES |
NO |
Most communication server-to-server |
YES |
NO |
VARIES |
무슨말인지 이해가 안될지도 모르지만 우선 내 생각이 이거 2가지만 기억하면 좋을것 같다.
4. Response_type
위에서 잠깐 언급한 3가지의 Flow는 Authorization Request 에 response_type 의 값에 따라서 결정된다. response_type 은 필수 값이다.
response_type value |
Flow |
code |
Authorization Code |
id_token |
Implicit |
id_token token |
Implicit |
code id_token |
Hybrid |
code token |
Hybrid |
code id_token token |
Hybrid |
각각의 흐름에 대한 특징들은 다음 글에서 다시 설명하겠다.
참고자료
https://connect2id.com/learn/openid-connect
http://openid.net/specs/openid-connect-core-1_0.html#IDToken
https://medium.com/@darutk/diagrams-of-all-the-openid-connect-flows-6968e3990660
'Development > Tech&Seminar' 카테고리의 다른 글
TCC가 뭐지??? (0) | 2018.09.07 |
---|---|
Openssl로 SSL 을 위한 인증서 발급하기 (HTTPS) (2) | 2018.08.22 |
#2 OpenID Connect Flow (0) | 2018.08.14 |
Google Cloud Study Jams 후기 (0) | 2018.05.15 |
구글 클라우드 핸즈온 - 대용량 아키텍쳐 설계 워크샵 후기 (0) | 2017.07.27 |