Oauth2.0

OAuth2.0

용어 정리

  • client: 사용하는 앱, 만들고 있는 서비스를 의미한다.
  • Resource Owner : 리소스를 가지고 있는 오너로서 사용자의 해당한다.
  • Resource Server: 사용자의 정보를 가져올 Server를 의미한다. gihub, facebook, google 등이 될 수 있다.
  • Client ID: 클라이언트를 식별할 수 있는 아이디이다.
  • Client Secret : 클라아인트 비밀번호이다. 절대로 외부에 노출되면 안되는 정보이다.
  • Authorized redirect URLs : Resrouce Server가 권한을 부여하는 과정에서 Authorized Code를 전달해 주는데 전달할 주소이다.

등록

OAuth를 제공하는 Resource Server 에서 프로젝트를 만들어서 Client ID, Client Secret, Authrozied redirect URLs 설정한다.

클라이언트에서 환경 변수 등으로 Client ID, Client Secret 을 저장한다.

Resource Owner 승인

  • Resource Server를 통해 로그인할 수 있는 화면을 구성하거나 API를 구현한다.
  • Resource Server로 요청을 보내면 되는데, [https://resource.server/?client_id=1&scope=<기능들>&&redirect_uir=<RedirectURI>](https://resource.server/?client_id=1&scope=<기능들>&&redirect_uir=<RedirectURI>) 이런 형태의 요청을 보내면 된다.
  • Resource Server 에서 요청을 받으면 client_id 를 확인하고 등록된 아이디가 있다면 요청받은 redirect URL 과 등록된 redirect URL 이 맞는지 확인한다. 여기서 틀리면 종료된다.
  • 그다음, 요청한 기능에 대한 허용 할 것인지에 화면을 Resource Server에서 보여준다.
  • Resource Owner 가 승인하면 Resource Server에 승인 했다는 정보를 전달하고 Server는 Owner에 id 와 기능 scope 를 저장한다.

Resource Server 승인

  • Server 는 authorization code 를 담아서 Owner 에게 전달한다. 이때 헤더에 Location을 추가해서 응답할때에는 Client로 리다이렉트 할 수 있도록 한다. Location: [https://client/callback?code=3](https://client/callback?code=3)
  • Client 는 콜백 주소를 통해서 authorization code 를 알 수 있게 된다.
  • Client 는 Resouce Server에게 직접 token을 요청하게 된다. 이때, authorization code, client_id, client_scret, redirect_uri 를 전달한다.
  • Server는 정보를 모아서 client 와 user를 식별해서 access Token 을 발급및 응답한다.

API 사용

요청을 보낼때 Authorization: Bearer 설정하여 보낸다.

refresh token

리프레쉬 토큰을 이용해서 토큰이 만료 되었을때 다시 받아올 수 있다.

  • Resource Server 와 별개로 Authorization Server 를 두어서 Access Token과 Refresh Token 을 Client 에게 전달한다.
  • 클라이언트는 Access Token을 이용해서 Resource Server에 자원을 흭득한다.
  • Access Token이 만료되게 되면 Resource Server로 부터 Invalid Token Error를 받게된다.
  • Client는 이때 Authorization Server로 부터 받은 Refresh Token을 이용해서 Access Token 을 요청하고 다시 받아온다. 처음부터 리소스 허가 요청 하는 과정을 생략할 수 있다.