[OAuth]OAuth(Open Authorization)

류재성's avatar
Jun 05, 2024
[OAuth]OAuth(Open Authorization)

1. OAuth(Open Authorization) 란?

 
💡
OAuth(Open Authorization)는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. OAuth는 로그인 방식이 아니라 Client Server(내가 만들 서버)가 Resource Server(카카오, 네이버)에게 Resource Owner(고객)의 정보를 대신 접근할 수 있는 권한을 위임받는 방식이다.
 
notion image
 
  • Resource Owner (자원 소유자): 리소스(정보)의 소유자, 일반적으로 최종 사용자
  • Client (클라이언트): 리소스 소유자의 리소스에 접근하려는 애플리케이션. 예를 들어, 타사 앱이나 웹사이트
  • Resource Server (리소스 서버): 보호된 리소스를 호스팅하는 서버. 클라이언트는 인가 토큰을 사용해 리소스 서버에 접근
 
 

2. OAuth의 동작 방식

 

2.1 권한 부여 코드 방식 (Authorization Code Grant)

💡
주로 웹페이지같이 SSR 방식에서 사용된다. 클라이언트 애플리케이션이 자원 소유자의 자원에 접근하기 위해 인가 서버로부터 권한 부여 코드를 획득하는 과정이다.
 
notion image
 
  1. 사용자 인증
      • 사용자가 클라이언트 서버를 통해 리소스 서버에 접속을 시도한다. 클라이언트 서버는 사용자를 인가 서버로 리디렉션한다.
  1. 사용자 승인
      • 사용자는 리소스 서버에서 로그인하고, 클라이언트 서버가 요청하는 권한을 승인한다. 이 과정에서 scope가 필요하다. scope 는 클라이언트 서버가 리소스 서버에 접근할 수 있는 권한의 범위를 정의하는 매개변수이다.
  1. 인가 코드 발급
      • 사용자가 권한을 승인하면 리소스 서버는 클라이언트에게 인가 코드를 발급한다. 이 코드는 일회용이며, 짧은 시간 동안만 유효하다.
  1. 액세스 토큰 발급
      • 클라이언트 서버는 인가 코드를 리소스 서버에 제출하여 액세스 토큰을 요청한다. 리소스 서버는 클라이언트를 인증하고 유효한 인가 코드인지 확인한 후 액세스 토큰을 발급한다.
  1. 리소스 접근
      • 클라이언트 서버는 발급받은 액세스 토큰을 사용하여 리소스 서버에 요청을 보내고, 보호된 리소스에 접근한다.
 
💡
리소스 서버로 부터 받은 토큰은 클라이언트 서버에서 저장하지 않는다. 그 이유는 사용자가 많아져 서버가 늘어나면 다른 서버에서는 토큰이 없어 검증이 불가능하기 때문이다. 따라서 OAuth 인증이 완료되면 리소스 서버로부터 받은 토큰은 사용하지 않고, 클라이언트 서버가 새롭게 만든 토큰을 리소스 오너에게 제공해 이 토큰으로 인증을 한다.
 
 

2.2 클라이언트 자격 증명 방식(Client Credentials Grant)

💡
주소 휴대폰 앱과 같은 CSR 방식에서 사용한다. 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용된다. 한마디로 클라이언트가 Resource Owner 인 경우를 의미한다.
 
notion image
 
  1. 클라이언트 자격 증명 준비:
      • 애플리케이션은 인가 서버로부터 받은 클라이언트 ID와 클라이언트 시크릿을 가지고 있다. 이 자격 증명은 애플리케이션이 인가 서버에 등록될 때 부여된다.(휴대폰 어플을 받을 때 이미 포함되어있다.)
  1. 토큰 요청:
      • 애플리케이션은 인가 서버에 액세스 토큰을 요청한다. 이 요청은 HTTP POST 방식으로 이루어진다.
  1. 토큰 발급:
      • 인가 서버는 애플리케이션의 자격 증명을 확인한다. 자격 증명이 유효하면, 인가 서버는 애플리케이션에 액세스 토큰을 발급해준다.
  1. 리소스 접근:
      • 애플리케이션은 발급받은 액세스 토큰을 사용하여 보호된 리소스에 접근한다.
  1. 리소스 서버 응답:
      • 자원 서버는 액세스 토큰의 유효성을 한다. 토큰이 유효하면, 요청된 데이터를 애플리케이션에 반환한다.
 
 
Share article

{CODE-RYU};