fragile and resilient

정리

OAuth 2.0 인증 과정

Green Lawn 2022. 7. 10. 14:23

OAuth는 인증 / 인가를 위한 개방형 표준 프로토콜로, 사용자가 인터넷 서비스(facebook, 카카오톡 등) 기능을 다른 애플리케이션에서도 사용할 수 있도록 한 것입니다.

 

위 글만 봐서는 OAuth가 무엇인지 감을 잡기 어려울 것이라 생각합니다.

OAuth와 로그인을 일상생활 예시에 빗대어 비교한 글이 있는데요.

해당 글을 읽으면, OAuth의 동작 과정을 직관적으로 이해하는 데 도움이 될 것 같습니다.

간단하게 요약하면 회사 건물에 출입할 때, 회사 사원이 사원증을 가지고 출입하는 것이 로그인이고, 외부인이 방문증을 수령한 후 회사에 출입하는 것이 OAuth입니다.

글의 전문을 읽으시면 더 도움이 되실 것 같습니다. https://d2.naver.com/helloworld/24942

OAuth 인증 / 인가 과정

OAuth 인증 과정

OAuth Flow

OAuth flow

1) FE가 Github에 ID와 비밀번호를 가지고 로그인을 요청합니다. (이때 client_id와 redirect_uri를 파라미터로 같이 넘깁니다.)

GET https://github.com/login/oauth/authorize

Parameters:
client_id, redirect_uri

2) Github는 FE에게 redirect_uri로 Authorization code를 줍니다.

3) FE는 Github에게 받은 Authorization code를 BE에게 줍니다.

4) BE는 Authorization code를 사용해서, access_token을 요청합니다.

POST https://github.com/login/oauth/access_token

Parameters:
client_id, client_secret, code

5) BE는 Github으로 부터 access_token을 받습니다.

6) BE는 받은 access_token을 사용해서 필요한 리소스(ex. 깃허브 프로필 정보)를 요구합니다.

GET https://api.github.com/user

Authorization:
access_token

7) Github는 BE에 리소스를 제공합니다.

8) 받은 리소스의 정보를 활용해서 FE와 통신할 token을 발급합니다.

9) FE는 발급받은 token을 사용해서 BE와 통신합니다.

 

동작 과정을 쉽게 이해하기 위해, Postman으로 직접 테스트해 보겠습니다.

 

1) OAuth App 등록

깃허브 Settings → Developer settings → OAuth Apps → new OAuth App 에서 OAuth App을 등록할 수 있습니다.

등록하면 Client ID, Client secrets를 얻을 수 있습니다. 해당 값을 가지고 테스트를 진행해 보겠습니다. 

 

2) 주소창에 위에서 부여 받은 데이터를 사용해서, GET https://github.com/login/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri} 입력

위의 주소를 입력하고 엔터를 치면 위에서 앱을 등록할 때 설정했던, redirect_uri로 주소가 바뀌면서 Authorization code가 나오게 됩니다. 

 

3) client_id, client_secret, Authorization code를 사용해서 POST https://github.com/login/oauth/access_token 요청을 보냅니다.

해당 요청을 보내면 access_token을 받을 수 있습니다.

 

4) access_token을 사용해서, GET https://api.github.com/user에 요청을 보내면 해당 계정과 관련된 정보를 제공받을 수 있습니다.

 


References

https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps

https://d2.naver.com/helloworld/24942

https://iskull-dev.tistory.com/m/214

https://tecoble.techcourse.co.kr/post/2021-07-10-understanding-oauth/

땡큐 레넌, 태태

'정리' 카테고리의 다른 글

[Logging] Logback이란?  (0) 2022.08.26
[Test] Test Double  (0) 2022.05.26
[Git] Branch 관리 (Merge, Rebase)  (0) 2022.02.14
[Git] git 영역 및 상태  (0) 2022.02.14