OAuth 2.0

Posted by Eun JongHyeok on December 13, 2020
  1. OAuth
  2. 용어
  3. 클라이언트 등록
  4. Authorization 획득
  5. 추가사항
  6. Reference

생활 코딩의 OAuth 영상과 관련 자료를 찾아보고 정리하는 글입니다. 간단하게 알고 싶으면 영상을 보고 좀 더 자세하게 알고 싶으면 rfc 문서를 읽어보면 좋을 것 같습니다.

OAuth

예를 들어, 당신이 달력 앱을 만들고 있습니다. 당신의 앱은 구글 로그인을 지원하고 사용자의 생일을 달력에 표시하고자 합니다.
사용자의 생일을 집적 입력시킬 수 있지만 구글에 사용자의 정보를 요청해서 받아 오고 싶습니다. 만일 당신이 사용자의 아이디와 비밀번호를 받아와 사용한다면 이는 보안상 취약할 것입니다.
이러한 상황에서 제 3자 어플리케이션에게 특정인에게 한정된 리스소에 접근할 권한을 부여하기 위해 고안된 Open Standard가 OAuth입니다.

용어

용어가 좀 많습니다. 먼저 가볍게 알아두어야 과정을 이해하기 편합니다.

역활

Resource Owner

리소스에 접근할 권한을 가진 개체를 말합니다. 앱을 이용하는 사용자라 생각합시다.

Resource Server

보호된 리스소를 호스팅하고 있는 서버를 말합니다. Access Token을 사용하여 요청하면 응답을 해줍니다. 사용자의 정보를 가지고 있는 서버라 생각합시다.

Client

Resource Owner를 대신하여 접근 권한을 위임 받을 어플리케이션을 말합니다.

Authorization server

인증(Authenication)이 되었고 접근 권한(Authorization)을 가지고 Resource Owner에게 Access Token을 발급 해줄 서버를 말합니다.

관련 용어

Client ID

Client Identifier(클라이언트 식별자) 입니다. Authorization Server가 클라이언트 등록 과정에서 발급해 줍니다. 공개되어도 상관 없고 Authorization 과정에서 절대 혼자 사용되지 않습니다.

Client Secret

Client와 Authorization Server만 알고 있어야 하는 패스워드입니다. App에서는 Client ID와 Client Secret을 App ID, App Secret이라고도 합니다.

Redirect URI

Authorization과 Resource Owner와의 인증 및 권한 승인후 Client에게 Authorization Code를 전달하기 위한 Callback URL입니다.

Authorization Code

Access Token을 발급 받기 위해 임시로 사용되는 키입니다.

Access Token

Client가 Resource Owner를 대신하여 Resource Server에 접근할 수 있는 키입니다.

Refresh Token

Access Token에는 수명이 있습니다. 일정 시간이 지난 뒤에는 재발급이 필요하며 이때 사용되는 토큰입니다.

클라이언트 등록

프로토콜을 진행하기 전에 먼저 클라이언트 등록을 해야합니다.
구글, 페이스북, 카카오와 같은 IDP에 앱을 등록합니다. 각 회사의 개발 플랫폼에 접속하여 등록 폼에 맞추어 등록해 줍시다.
만일 앱에서 카카오 로그인을 진행하고 싶다면 https://developers.kakao.com/ 에서 등록하면 됩니다. Redirect URI를 여러개 등록할 수 도 있습니다.

Authorization 획득

클라이언트는 IDP 로그인 버튼을 구현해 놓습니다. 각 버튼에는 로그인 API와 연결된 링크에 Client ID, Redirection URI, 권한 Scope를 parameter로 추가합니다.

그리고 우리가 알고 있는 로그인 과정과 권한 승인 과정을 진행합니다.

승인을 하면 Aurhorization Server에서 Authorization Code를 전달해줍니다. 이후 리다이렉션을 통해 클라이언트에 전달이 되고 Authorization Server에 Access Token을 요청합니다. 올바른 요청이면 Access Token을 발급해 줍니다.

이제 클라이언트는 Access Token을 이용하여 Resource Server에 Resource를 요청할 수 있습니다.

추가사항

API 사용과 관련된 실제 사용 등은 따로 정리하도록 하겠습니다.
OpenID Connect, ID token 등 Authentication과 관련된 부분은 따로 정리하도록 하겠습니다.

Reference

생활 코딩
https://tools.ietf.org/html/rfc6749#section-1.1
https://developer.okta.com/blog/2019/10/21/illustrated-guide-to-oauth-and-oidc


Authentication
Authorization
OAuth

← Previous Post