programming/기타

Oauth2 Access Token 과 OIDC ID Token

yhsim98 2022. 2. 22. 16:30

 먼저 OAuth2는 사용자가 어떤 서비스에 저장된 자신의 데이터를 다른 서비스에서 접근할 수 있도록 허락해주는 프로토콜입니다.

 

OAuth2 프로토콜을 통하여 타 서비스에 저장된 사용자 데이터를 우리의 애플리케이션에서 접근할 수 있도록 사용자에게 명시적으로 허락을 받을 수 있습니다.

 

사용자 입장에서는 자신의 모든 데이터가 아닌 특정 데이터의  특정 작업에 대해서만 접근을 허용할 수 있습니다.

출처 https://www.daleseo.com/google-oauth/

OAuth 2.0의 인가는 크게 다음과 같은 흐름으로 진행됩니다.

  1. 사용자는 구글에 로그인 후에 애플리케이션에서 요청하는 권한을 확인하고, 해당 권한을 허용해줍니다.
  2. 구글 인가 서버는 사용자를 사전에 등록된 redirect uri로 리다이렉트 시키면서 access token을 애플리케이션에 보내줍니다.
  3. 애플리케이션은 이 access token을 이용해서 구글 API를 호출합니다.

 

 OIDC는 기본적으로 OAuth 프로토콜을 기반으로 작동하는 프로토콜로써 사용법이 매우 유사하지만 목적에는 큰 차이가 있습니다.

 

OIDC는 인증을 위해 사용하고, OAuth는 인가를 위해 사용합니다. 

OIDC는 오직 타 플랫폼을 통해 사용자가 누구인지를 확인하기 위해 사용하는 반면, OAuth는 타 플랫폼에 저장된 사용자의 데이터에 접근 권한을 얻기 위해 사용하게 됩니다.

 

OAuth의 목적은 타 플랫폼의 API 호출을 위해 access token을 확보하는 것이라면, OIDC의 경우에는 사용자의 정보가 담긴 id token을 확보하는 것입니다. 따라서, 단순 인증을 위해서라면 OIDC 프로토콜을 사용하는 것을 추천합니다.

 

ID token은 보통 JWT 방식의 토큰으로 payload에는 사용자의 정보와 해당 토큰 발급을 요청한 애플리케이션의 id가 들어가고, signature로는 해당 토큰을 발급한 플랫폼의 비밀키를 사용하게 됩니다.

 

서버에서는 해당 토큰을 플랫폼의 공개키를 사용하여 인코딩 함으로써 해당 토큰의 발급자를 검증할 수 있습니다.

payload에 있는 aud값을 통하여 해당 토큰이 우리 애플리케이션을 위해 발급되었다는 것을 확인할 수 있습니다.

 

현재 대부분의 해왜 플랫폼에서는 SNS로그인을 위하여 OIDC를 사용하는 추세입니다.

국내에서는 여전히 OAuth 방식을 사용하였는데, 얼마전에 메일로 카카오에서도 OIDC 지원한다고 날아와 반가웠던 기억이 있습니다.

 

밑의 링크는 OAuth2와 OIDC를 통하여 SNS로그인을 구현한 코드입니다.

AccessToken이나 IdToken의 발급은 클라이언트에 맡기고, token을 클라이언트로부터 전달받아 검증하여 로그인을 구현하고 있습니다.  

  https://github.com/yhsim98/KOALA_BACK_END/tree/main/src/main/java/in/koala/serviceImpl/sns

 

GitHub - yhsim98/KOALA_BACK_END

Contribute to yhsim98/KOALA_BACK_END development by creating an account on GitHub.

github.com

 

출처

https://auth0.com/blog/id-token-access-token-what-is-the-difference/

 

ID Token and Access Token: What Is the Difference?

Learn what ID and access tokens are and how to correctly use them in the OpenID Connect and OAuth context.

auth0.com

https://www.daleseo.com/google-oidc/

 

구글 OpenID Connect 사용법

Engineering Blog by Dale Seo

www.daleseo.com