OAuth 2.0 /

길고 꾸준하게·2022년 5월 29일
0

OAuth

인증을 위한 업계 표준 프로토콜. '특정 권한부여 흐름'을 제공하면서 단순성에 중점을 둔다.
외부 서비스에서도 인증을 가능하게하고 + 해당 서비스의 API를 이용하게 해준다.

보통 소셜로그인에 많이 쓰인다


OAuth2.0 인증방식 종류

  • Authorization Code Grant Type
  • Implicit Grant Type
  • Resource Owner Password Credentials Grant Type
  • Client Credentials Grant Type

4가지가 있지만 대부분의 소셜미디어 로그인에 쓰이는 첫번째 (Authorization Code Grant Type)의 흐름을 블로깅할거다.


OAuth2.0 흐름

  • 리소스(Resource) : 우리가 원하는 정보(리소스서버에 담긴 유저의 정보일것이다)
  • 리소스 서버 : 리소스가 담긴 서버 -> ex) 구글 카카오 등
  • 클라이언트(Client) : 리소스 서버에서 제공하는 리소스를 사용하는 App
    -> A앱의 소셜로그인을 제공한다면 A앱이 리소스서버(ex구글)에 리소스를 요청하는거니까 A앱이 클라이언트가 될거다
  • 리소스 오너(Resource Owner) : 정보의 소유자 (즉 App을 이용하는 user)
  • 권한 서버(Authorization Server) : 리소스오너의 리소스를 사용하기위해 필요한 권한부여 코드(Authorization code) + 엑세스토큰(Access Token)을 발급해주는 서버
    보통 리소스서버의 하위 url에 존재함


1. Client 등록 to 리소스 서버(Resource Server)

Client가 리소스서버를 이용하기 위해서 리소스서버의 사전승인을 받아야한다.
승인을한 리소스서버는 client가 누군지 기억(식별)하기위해 client ID/Secret(pw)를 부여해주고.
권한부여코드 / 엑세스토큰 발급후 리다이렉트시킬 url을 입력받는다.

2. 리소스 오너(Resource Owner)의 승인

리소스 오너의 정보를 이용하는거기 때문에 확인을 받아야한다. 즉 내가 ~인데 ~정보가 필요해. 라고 말을해야한다
그래서 Client는 리소스 서버한테(정확히는 권한서버인데) 내가 누군지를 밝힐 client_id와
리소스오너의 정보를 어디까지 받아낼건지를 정하는 scope를 쿼리문으로 담아서 요청을 보낸다.
ex) https://resource.server?client_id=""&scope=""

그럼 리소스서버가 "client가 너(리소스 오너)의 정보를 쓴다는데 허락할꺼야?" 라는 내용이 담긴 페이지로 보내는데. 리소스 오너가 동의를 하면 권한부여코드(Authorization code)를 담아서 우리가 세팅해놓은 redirect url로 보낸다. 즉 "리소스 오너가 허락했네 라는 인증이 담긴 인증코드를 담아서 우리한테 보내주는거다"

3. 엑세스 토큰(Access Token) 발급

리소스오너의 승인을 받았으니 이제 리소스오너를 통하지않고 리소스 서버에 직접 접속해서 리소스서버의 API를 이용해 정보를 받을텐데 이를 위해서 권한부여 코드 + client_id / secret 이 3개를 가지고 엑세스 토큰(access token)을 발급받아야 최종적으로 승인이됬다! 라는 느낌이 된거다

4. 리소스서버에 접근

리소스서버는 엑세스토큰을 가진 클라이언트를 보고 "아 얘는 ~에 대한 ~정보(scope)에 대해 접근권한이 있네" 하고 scope부분에 한정해서 접근을 허용할거다


부트캠프시절 카카오,네이버 OAuth권한부여를 통해 로그인 구현을 해본적이 있다.
물론 로그인 구현자체는 문제가아닌데. 이후 소셜미디어로 로그인한 user들을 어떻게 관리할건지에서 애를먹긴했지만..

해본경험이있어 수월하게 이해했다

출처

https://hammerstudy.tistory.com/12
https://rutgo-letsgo.tistory.com/123
https://developers.payco.com/guide/development/start

profile
작은 나의 개발 일기장

0개의 댓글