1. OAuth(Open Authorization)란?
OAuth의 사전적 정의는 다음과 같습니다.
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해
웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는
접근 위임을 위한 개방형 표준
쉽게 말하면, 어플리케이션을 이용할 때 사용자가 해당 어플리케이션에 ID, PW등의 정보를 제공하지 않고,
신뢰할 수 있는 외부 어플리케이션(Naver, Google, Kakao, Facebook 등)의 Open API에
ID, PW를 입력하여 해당 어플리케이션이 인증 과정을 처리해주는 방식입니다.
2. OAuth의 탄생 배경
OAuth이 없을 때의 상황을 생각해보자.
'A' 어플리케이션에서 Naver의 정보(리소스)를 가져오기 위해서는 Naver의 ID와 PW를 직접 입력받아서
'A' 어플리케이션에 저장해서 필요할 때마다 불러와서 사용을 해야했다.
이렇게 사용했을 때, '사용자' / 'A' 어플리케이션 / Naver 이렇게 3가지 입장에서 각각 문제가 발생합니다.
이 문제를 해결하기 위해 OAuth를 도입하여 인증을 외부 어플리케이션에 위임하여 처리하도록 해결합니다.
3. OAuth 2.0 용어 (구성 요소)
구분 | 설명 | |
Resource Server | OAuth2.0 서비스를 제공하고 Resource를 관리하는 서버 (ex - Google, Naver, Kakao, ...) 클라이언트(Client) - 이 서버로 인증 서버에서 발급받은 Token을 넘겨 개인 정보를 받을 수 있다. |
|
Resource Owner | 어플리케이션을 이용하려는 Resource Server의 계정을 소유하고 있는 사용자 | |
Client | Resource Server의 API를 사용하여 정보를 가져오려는 애플리케이션 서버 Client라는 이름이 붙은 이유는, Resource Server에 API를 요청하기 때문 |
|
Authorization Server | Clinet가 Resource Server의 서비스를 사용할 수 있게 인증하고, 토큰을 발행해주는 인증 서버 (ex - Google, Naver, Kakao, ... 의 인증 서버) 사용자(Resource Owner) -이 서버로 ID, PW를 넘겨서 Authorization Code 발급받음 클라이언트(Client) - 사용자가 발급받은 Authorization Code를 이 서버로 넘겨 Token 발급받음 |
|
AccessToken | JWT의 AccessToken - 해당 토큰으로 Resource Server에 요청해서 개인 정보를 받을 수 있다. |
|
RefreshToken | JWT의 RefreshToken - 해당 토큰으로 AccessToken을 재발급 받을 수 있다. |
4. OAuth 2.0 인증 과정
아래 이미지는 PAYCO의 OAuth 2.0 인증 과정입니다.
해당 이미지를 보면서 이해해봅시다!
PAYCO OAuth 2.0 프로세스 (출처 : PAYCO 개발자센터)
* 사용자 - Resource Owner
* 서비스(사용자가 이용하려는 서비스) - Client
* PAYCO 인증 서비스 - Authorization Server
* PAYCO API 서비스 - Resource Server
이렇게 맵핑됩니다.
크게 요약해보면,
Client(사용자가 이용하려는 서비스)에서 Resource Owner(서비스를 이용하려는 사용자)를
대신하여 Authorization Server와 Resource Server에 요청을 보내 로그인을 수행한다.
자세하게 위의 인증 과정을 살펴봅시다.