Computer Science

[OAuth] OAuth란? OAuth 동작 과정

DEV숨 2022. 12. 13. 20:00

OAuth란?

외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 웹 어플리케이션을 쉽게 찾아볼 수 있다.

클릭 한 번으로 간편하게 로그인할 수 있을 뿐만 아니라, 연동되는 외부 웹 어플리케션에서 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다.

이 때 사용되는 프로토콜이 OAuth이다.

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과)

 

 

OAuth 용어 정리

Resource Server: Client가 제어하고자 하는 자원을 보유하고 있는 서버

  • Slack, Google, Github 등이 속한다.

Resource Owner: 자원의 소유자

  • Client의 서비스에 로그인하려고 하는 유저가 속한다.

Client: Resource Server를 통해 정보를 가져오고자하는 웹 어플리케이션이 속한다.

Scope: Client가 Resource Server로 부터 인가받을 권한의 범위

Access Token: 리소스 서버에서 사용자에 의해 부여된 데이터에 접근하기 위해서 클라이언트가 사용할 수 있는 유일한 키.

 

 

OAuth 동작 과정

  1. Client(웹 어플리케이션) 등록
    1. Client는 Resource Server를 사용하기 위해 자신의 서비스를 등록하고 승인을 받아야 한다.
    2. 세 가지 정보를 부여 받는다.
      1. Client ID, Client Secret, Authorized redirect URL
  2. Resource Owner의 승인
    1. Resource Owner는 Clien의 로그인 서비스를 이용하기 위해 소셜 로그인 버튼을 클릭한다.
    2. Resource Owner는 Resource Server에게 파라미터로 Client ID, Redirect URL, Scope를 포함한 요청을 보낸다.
    3. Resource Server는 다음 두 가지를 검사한다.
      1. 파라미터로 전달된 Client와 동일한 ID 값이 존재하는지 확인한다.
      2. 해당 Client ID에 해당하는 Redirect URL이 파라미터로 전달된 Redirect URL과 같은지 확인한다.
    4. Resource Server는 Resource Owner에게 Scope에 해당하는 권한을 Client에게 부여할 것인지를 확인한다.
    5. Resource Owner가 승인하면 Resource Server는 위에 포함된 Redirect URL에 임시 승인 코드(code)를 Client에게 보낸다.
  3. Resource Server의 승인
    1. Client는 받은 임시 승인 코드(code)와 함께 Client ID, Client Secret을 Resource Server에게 전송한다.
    2. Resource Server는 임시 승인 코드(code), Client ID, Client Secret을 확인한 후 Access Token을 발급한다.
  4. Client의 Access Token 사용
    1. Client는 해당 Access Token을 이용해 Resource Server의 자원을 사용하기 위한 API 호출 시 해당 토큰을 헤더에 담아 보낸다.

 

 

OAuth를 이용한 슬랙 로그인 동작 과정

이번 프로젝트에서는 OAuth 로그인으로 슬랙을 활용하였다.

 

그럼 이 OAuth 프로토콜을 이용한 슬랙 로그인 동작 과정에 대해 알아보자.

  1. User는 Slack에게 권한을 요청한다.
  2. Slack은 임시 승인 코드(code)를 전송한다.
  3. User는 code를 이용해 WAS에 로그인 요청을 한다.
  4. WAS는 User로 부터 전달받은 code와 함께 Client ID, Client Secret을 포함해 access token 발급을 요청한다.
  5. Slakc은 access token을 발급한다.
  6. WAS는 발급받은 access token을 이용해 slack에 필요한 정보를 요청한다. (예: 사용자의 프로필, 이름, 이메일 등)
  7. Slack은 해당하는 자원을 전송한다.
  8. WAS는 6에서 받은 자원을 이용해 자체적인 로그인 로직 실행 후 User에게 자신의 access token을 발급한다.

 

 

reference

https://ko.wikipedia.org/wiki/OAuth

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

https://deeplify.dev/back-end/spring/oauth2-social-login

https://velog.io/@jakeseo_me/Oauth-2.0과-OpenID-Connect-프로토콜-정리