반응형

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가지 종류가 있다. 


  1. Authorization Code Flow
  2. Implicit Flow
  3. 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가지만 기억하면 좋을것 같다. 


#1 All tokens returned from Authorization Endpoint : token 발급 위치에 대한 내용이다. Oauth 2.0 이나 OpenID Connect 나 정의 되어있는 URL 을 보면 끝에 authorize 로 끝나는 URL 이 있다. (아닐수도 있지만 보통 비슷하다) 이 URL 이 바로 Authorization Endpoint 이다. 먼저 인증이 되었는지 안되었는지 확일을 하는 URL 이고 이 URL 의 응답에 따라서 client 에서는 로그인 창으로 리다이렉트 되기도 한다. 이 값이 NO 라는 말은 Token 발급 Endpoint 가 아니라는 의미이다. 뒤에 또 설명을 하겠지만 간단히 설명하면 Authorization Code 방식은 Authorization Endpoint 에서 인증이 확인되면 Code를 발급하고 그 Code 를 가지고 Token Endpoint로 요청을 해서 Token을 발급받는다.

#2 All tokens returned from Token Endpoint : URL 이 accessToken 또는 token 이렇게 끝나는 URL 이다. Implicit Flow 같은 경우는 이미 Authorization Endpoint 에서 Token을 발급하기 때문에 Token Endpoint 가 필요 없다. 

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


728x90
반응형

+ Recent posts