[네트워크] OpenID Connect에 대해 알아보자

김우경·2021년 5월 19일
0

OIDC란?

  • 안전한 위임 접근을 위해 사용하는 OAuth2.0의 extension
  • ID Token의 발급을 명세한다.
    : 사용자 정보를 얻을 수 있게 하는 역할
    -> id, 이름, 로그인 시간, id token의 만료기간 등의 정보
  • 내가 신뢰하는 external provider (주로 IdP)가 나를 대신해서 내가 나임을 인증하고, 내 정보를 Application에 제공
  • 한마디로 이용하려는 서비스가 IdP가 가지고 있는 내 정보를 필요한 만큼 가져올 수 있도록 허락하는 과정!

ID_Token란?

  • 특정 사용자의 개인 정보 포함
    -> End User임을 인증하는데 Client Application에 내 정보 입력할 필요가 x
  • Security Token
    : Authorization Server가 End-User의 정보를 Security Token에 담아서 Client App에 제공

ID Token의 형태

  • JSON Web Token으로 표현됨
  • Header.Payload.Signature 형태로 구성
    -> 위의 Payload부분을 decode하면 아래와 같이 JWT로 표현된다.

OAuth와 OIDC?

위에서 언급한것과 같이 OIDC는 OAuth2.0의 확장이다. 따라서 과정은 전부 동일한데, ID Token이 포함되면 OIDC이다.

OIDC의 흐름

OIDC의 목적은 client가 user의 정보를 server를 통해 가져오는 것!
이러한 user의 정보를 얻기 위해서는 위에서 언급했다싶이 ID token이 필요하다.

ID Token의 요청

: Authorization Endpoint인 WebAPI에 parameter로 response_type을 지정해서 request를 보낸다.
->response_type에는 code, token, 그리고 OIDC를 사용하기 위한 id_token이 있다.

-> ID token을 얻기 위한 request에는 scope 파라미터에 꼭 Open ID를 포함해야 한다.

1. response_type = code인 경우

response_type = code로 설정하여 서버에 요청하는 과정은 OAuth2.0의 과정과 거의 유사하다.

-> 이때 request에 scope이 포함되지 않으면, ID token을 제외한 Access token만 발급된다.

2. response_type = code인 경우

response_type = code로 설정하여 서버에 요청하는 과정은 다음과 같다.

그림과 같이 response에 아예 ID token이 제공되지 않는다. 따라서 ID token의 발급이 목적인 OIDC에서는 사용하지 않음!

2. response_type = token인 경우

response_type = token로 설정하여 서버에 요청하는 과정은 다음과 같다

그림과 같이 오직 ID token만 발급된다. 따라서 access 권한이 아닌 user의 계정 정보만 필요한 경우에 사용한다.

profile
Hongik CE

0개의 댓글