[OAuth2.0] OAuth2.0 개요

반응형

이번 글에서는 OAuth2.0의 개요에 대해 알아보겠습니다.

0. OAuth2.0 동작흐름

앞서 OAuth2.0의 기본적인 동작 흐름은 아래와 같이 설명했습니다.

image.png

이제 위의 동작 흐름을 조금더 자세히 살펴 보겠습니다.

1. 사용자 동의(User Consent)

위의 흐름에서 구글은 사용자에게 Velog가 특정 서비스에 접근할 것을 허용할 것인지 확인합니다. 이러한 확인을 사용자 동의(User Consent)라고 합니다.

사용자 동의(User Consent) 과정을 살펴보기 위해 신규 사용자가 Velog에 회원가입하는 상황을 가정하겠습니다. 아래 빨간색 화살표 부분이 사용자 동의(User Consent)를 획득하는 지점입니다.

image.png

신규 사용자가 아래와 같이 Google 로그인 버튼을 누르면

image.png

사용자는 Google에 직접 ID/PW를 입력해 로그인하게 됩니다.

image.png

여기서 눈치채셨겠지만 로그인창 하단에는 다음과 같은 구문이 쓰여있습니다.

계속 진행하기 위해 Google에서 내 이름, 이메일 주소, 언어 환경설정, 프로필 사진을 velog.io과(와) 공유합니다.

위의 구문에는 Velog가 사용자에게 요청하는 권한들이 나열 되어있습니다. 즉, 만약 사용자가 위 창에서 Google로 로그인한다면 위와 같은 권한들이 Velog에게 주어지도록 사용자 동의(User Consent)를 하게되는 셈입니다.

위의 Google 로그인을 마치면, 아래와 같이 Velog 회원가입창으로 이동하게 됩니다. 위에서 사용자가 구글의 이메일 주소를 Velog와 공유하는 것에 동의했으므로, Velog의 회원가입창의 이메일 주소는 구글 이메일이 입력되며, 변경할 수 없는 상태입니다.

image.png

또한, 위에서 사용자가 구글의 프리필 사진을 Velog와 공유하는 것에 동의했으므로, Velog의 프로필 사진은 구글의 프로필 사진과 동일합니다.

image.png

이 처럼 서비스(Velog)가 사용자에게 권한을 요청한 리소스(User Profile)는 요청한 서비스의 소유자(Google)가 직접 사용자에게 사용자 동의(User Consent)를 물어보게 됩니다. 이후 동의를 받은 서비스(Velog)는 해당 리소스(User Profile)에 접근할 수 있는 권한을 위임받게 됩니다.

2. 인가코드 그랜트 vs 암시적 그랜트

Velog에게 사용자의 프로필 정보에 접근 할 수 있는 권한이 주어지고 나면, Velog와 Google간에 정보 교환을 위한 상호작용이 이루어지게 됩니다.

✔ 위의 예제에서는 이미 Velog와 Google간의 상호작용을 통해 사용자의 User Profile 정보를 획득했습니다.

OAuth2.0은 정보 교환을 위한 다양한 방법을 지원하며, '클라이언트의 신뢰 레벨'에 따라 동작 흐름이 달라집니다. OAuth2.0에서는 그것을 '그랜트 유형'이라 부르며 OAuth2.0에는 두가지 유형의 그랜트 유형이 있습니다.

• 인가 코드 그랜트 (Authorization Code Grant) : 신뢰 클라이언트에서 사용하는 그랜트입니다. 서버 사이드(신뢰) 워크플로우를 사용합니다.

• 암시적 그랜트 (Implicit Grant) : 비신뢰 클라이언트에서 사용하는 그랜트입니다. 클라이언트 사이드(비신뢰) 워크플로우를 사용합니다.

여기서 클라이언트란 Velog와 같은 서비스를 의미하며, 위 두 그랜트의 차이점을 이해하려면 먼저 신뢰 개념에 대해 이해해야 합니다.

3. 신뢰 vs 비신뢰 클라이언트

클라이언트의 신뢰 레벨이란 클라이언트가 안전하게 정보를 저장하고 전송하는 능력입니다. 이러한 신뢰 레벨은 아래와 같이 구분할 수 있습니다.

• 신뢰 클라이언트 : 기밀 정보를 안전하게 저장하고 전송할 수 있는 백엔드 서버가 존재하는 전형적인 3계층 클라이언트-서버-데이터베이스 애플리케이션입니다.

• 비신뢰 클라이언트 : 브라우저 기반의 애플리케이션, 즉 HTML/JavScript 애플리케이션으로서 정보를 저장하는 서버가 없는 애플리케이션입니다.

4. 요약

요약하자면.. 😅

3계층 애플리케이션과 같이 정보를 안전하게 저장 및 전송할 수 있는 신뢰 어플리케이션인가 코드 그랜트 방법을 사용해 정보를 교환하며 이러한 방법은 서버 사이드 워크플로우를 따르게 됩니다.

브라우저 기반의 애플리케이션과 같이 정보를 저장하는 서버가 없는 비신뢰 어플리케이션암시적 그랜트 방법을 사용해 정보를 교환하며 이러한 방법은 클라이언트 사이드 워크플로우를 따르게 됩니다.

image.png

클라이언트 사이드 워크플로우와 서버 사이드 워크플로우는 다음장에서 다뤄보겠습니다.


참고자료

 

OAuth 2.0 마스터:OAuth 2.0 애플리케이션 개발을 위한 모든 것

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY