1. OAuth(Open Authorization) 란?
OAuth(Open Authorization)는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
OAuth는 로그인 방식이 아니라 Client Server(내가 만들 서버)가 Resource Server(카카오, 네이버)에게 Resource Owner(고객)의 정보를 대신 접근할 수 있는 권한을 위임받는 방식이다.
- Resource Owner (자원 소유자): 리소스(정보)의 소유자, 일반적으로 최종 사용자
- Client (클라이언트): 리소스 소유자의 리소스에 접근하려는 애플리케이션. 예를 들어, 타사 앱이나 웹사이트
- Resource Server (리소스 서버): 보호된 리소스를 호스팅하는 서버. 클라이언트는 인가 토큰을 사용해 리소스 서버에 접근
2. OAuth의 동작 방식
2.1 권한 부여 코드 방식 (Authorization Code Grant)
주로 웹페이지같이 SSR 방식에서 사용된다. 클라이언트 애플리케이션이 자원 소유자의 자원에 접근하기 위해 인가 서버로부터 권한 부여 코드를 획득하는 과정이다.
- 사용자 인증
- 사용자가 클라이언트 서버를 통해 리소스 서버에 접속을 시도한다. 클라이언트 서버는 사용자를 인가 서버로 리디렉션한다.
- 사용자 승인
- 사용자는 리소스 서버에서 로그인하고, 클라이언트 서버가 요청하는 권한을 승인한다. 이 과정에서
scope
가 필요하다.scope
는 클라이언트 서버가 리소스 서버에 접근할 수 있는 권한의 범위를 정의하는 매개변수이다.
- 인가 코드 발급
- 사용자가 권한을 승인하면 리소스 서버는 클라이언트에게 인가 코드를 발급한다. 이 코드는 일회용이며, 짧은 시간 동안만 유효하다.
- 액세스 토큰 발급
- 클라이언트 서버는 인가 코드를 리소스 서버에 제출하여 액세스 토큰을 요청한다. 리소스 서버는 클라이언트를 인증하고 유효한 인가 코드인지 확인한 후 액세스 토큰을 발급한다.
- 리소스 접근
- 클라이언트 서버는 발급받은 액세스 토큰을 사용하여 리소스 서버에 요청을 보내고, 보호된 리소스에 접근한다.
리소스 서버로 부터 받은 토큰은 클라이언트 서버에서 저장하지 않는다. 그 이유는 사용자가 많아져 서버가 늘어나면 다른 서버에서는 토큰이 없어 검증이 불가능하기 때문이다. 따라서 OAuth 인증이 완료되면 리소스 서버로부터 받은 토큰은 사용하지 않고, 클라이언트 서버가 새롭게 만든 토큰을 리소스 오너에게 제공해 이 토큰으로 인증을 한다.
2.2 클라이언트 자격 증명 방식(Client Credentials Grant)
주소 휴대폰 앱과 같은 CSR 방식에서 사용한다. 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용된다. 한마디로 클라이언트가 Resource Owner 인 경우를 의미한다.
- 클라이언트 자격 증명 준비:
- 애플리케이션은 인가 서버로부터 받은 클라이언트 ID와 클라이언트 시크릿을 가지고 있다. 이 자격 증명은 애플리케이션이 인가 서버에 등록될 때 부여된다.(휴대폰 어플을 받을 때 이미 포함되어있다.)
- 토큰 요청:
- 애플리케이션은 인가 서버에 액세스 토큰을 요청한다. 이 요청은 HTTP POST 방식으로 이루어진다.
- 토큰 발급:
- 인가 서버는 애플리케이션의 자격 증명을 확인한다. 자격 증명이 유효하면, 인가 서버는 애플리케이션에 액세스 토큰을 발급해준다.
- 리소스 접근:
- 애플리케이션은 발급받은 액세스 토큰을 사용하여 보호된 리소스에 접근한다.
- 리소스 서버 응답:
- 자원 서버는 액세스 토큰의 유효성을 한다. 토큰이 유효하면, 요청된 데이터를 애플리케이션에 반환한다.
Share article