반응형
앞에 글(2018/08/07 - [Development/Tech&Seminar] - #1 Open ID Connect 가 뭐야???에서 OpenID Connect가 무엇인지에 대해서 설명을 했었다. 이번에는 각가의 흐름에 대해서 좀더 자세히 설명을 해보기로 한다. 

OpenID Connect 의 Flow 는 response_type 에 의해서 정해진다고 말했었다. 그 response_type 에 따라서 어떻게 다른지 확인해보자.

아래 정의한 모든 Request는 parameter  scope  openid 가 포함되어야 한다. openid가 포함되어있지 않을 경우는 다르게 동작할 수 있다. 

1. response_type = code

Endpoint

Authorization Code

Access Token

ID Token

Authorization

O

X

X

Token

X

O

O


openid  포함되지 않을경우 (oauth authorization code flow  동일하다)


Endpoint

Authorization Code

Access Token

ID Token

Authorization

O

X

X

Token

X

O

X

 

    2. response_type = id_token (Token Endpoint 를 사용하지 않는다.)

    Endpoint

    Authorization Code

    Access Token

    ID Token

    Authorization

    X

    X

    O

     

    3. response_type = id_token token (Token Endpoint 를 사용하지 않는다.)


      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      X

      O

      O


      추가적으로 Oauth 2.0 에서는 response_type 에 token 이 라는 항목도 있지만 OpenID Connect 에서는 사용하지 않는다. response_type 이 token 일 경우에는 ID-Token을 리턴하지 않기 때문이다. 

      4. response_type = code id_token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      X

      O

      Token

      X

      O

      O


      5. response_type = code token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      O


      openid  포함되지 않을경우 (oauth authorization code flow  동일하다)


      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      X


      6. response_type = code id_token token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      O




      참고자료

      http://openid.net/specs/openid-connect-core-1_0.html#IDToken

      https://medium.com/@darutk/diagrams-of-all-the-openid-connect-flows-6968e3990660


      728x90
      반응형
      반응형

      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