OAuth (생활코딩)

yeon·2021년 4월 19일
0

OAuth

생활코딩

역할 - 생활코딩

용어 정리

  • Resource server: 우리가 제어하고자 하는 자원을 갖고있는 서버 (예: GitHub, Facebook, Google)
  • Authorization server: 인증과 관련된 것을 전담하는 서버 (여기선 그냥 Resouce server에 합쳐져서 설명된다.)
  • Resource owner: 일반 사용자, 자원의 소유자
  • Client: 우리가 만든 서비스, 리소스 서버에 접속해서 정보를 가져오는 의미의 Client (예: 생활코딩)

등록 Register

Client가 리소스 서버의 승인을 받는 과정

리소스 서버(GitHub, Google 등)에서 진행된다.

Client ID(클라이언트 식별자), Client Secret(외부에 절대 노출되면 안됨), Authorized redirect URIs(리소스 서버가 권한을 부여하는 과정에서 제공하는 Authorized code를 이곳에 지정한 URL로 보낸다.)

Resource owner의 승인

Resource owner가 Resource server에게 client의 접근을 승인한다는 것을 알려주는과정

Login with Google 과 같은 버튼을 누르는 과정

→ 이 버튼에 링크를 걸어두는데,

→ 로그인이 되어있다면 해당

→ 예를 들어, https://resource.server/?client_id=1&scope=B,C&redirect_uri=https//client/callback

→ 이 주소로 리소스 오너가 리소스 서버로 접속하면, 리소스 서버가 쿼리 파라미터로 넘어온 정보와 등록된 client의 정보(client_id, redirect_uri 등)가 일치하는지 확인한다.

Resource server의 승인

리소스 서버는 전달받은 client의 정보가 등록된 client 인지 확인하기 위해 리소스 오너를 통해 client에게 Authorization code를 전달한다.

리소스 서버가 리소스 오너에게 이런식으로 response를 보낸다.

→ Location: https://client/callback?code=3

→ 리소스 오너는 이 url로 접속하게 되는데 client에게 Authorization code를 전송한다.

→ 클라이언트는 리소스서버에게 곧바로 client_id, Authorization code, client_secret을 포함해서 요청을 보낸다.

https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_secret=2

→ 리소스 서버는 전송받은 값(Authorization code, client_id, client_secret)을 보고 해당하는 클라이언트에게 발급한 건지 확인한다.

→ 다음 절차인 Access token 발급을 진행한다.

Access Token 발급

리소스 서버는 Authorization code의 값으로 인증을 마쳤기 때문에 이 값을 지운다.

→ access token을 발급한다.

→ access token값을 client에게 전송하고, client는 이 값을 내부적으로 저장한다.

→ client가 이 access token값을 갖고 리소스서버에 전송하면 리소스 서버는 access token값을 확인하고 이에 해당하는 클라이언트와 유저를 확인해서 허용하게 된다.


Refresh token

access token의 수명이 다했을때, 새로운 access token을 발급받는 방법

access token을 통해서 리소스 서버에 접근하려고 하는데, invalid token error 가 발생하면 access token의 수명이 다했다는 것이다.

→ client는 refresh token을 authorization 서버에게 전달해서 access token을 다시 발급받는다.

사실 refresh token 에 대한 방법은 리소스 서버마다 다르다.

0개의 댓글