OAuth 2.0 동작 방식

YoungBin·2022년 11월 9일
0

OAuth 2.0 이란


간단하게 말하면 어떠한 서비스를 사용자에게 제공한다고 가정하자
애플리케이션 서버를 구축 및 로그인 및 회원가입 서비스를 구현하기 위해 사용자로부터 개인정보를 받아 저장하고 관리해야 할 것이다.

하지만 OAuth 2.0을 사용하면 대부분의 로그인, 개인정보 관리 책임을 서드파티 애플리케이션(Ex. 카카오, 구글, 페이스북)에게 위임 할 수 있다.

Authorization & Resource Server


Authorization Server는 Resource Owner를 인증하고, Client에게 액세스 토큰을 발급해주는 서버이다. Resource Server는 구글, 페이스북, 트위터와 같이 리소스를 가지고 있는 서버를 말한다.

Redirect URI


OAuth 2.0 서비스는 인증이 성공한 사용자를 사전에 등록된 Redirect URI로만 리디렉션 시킨다. 승인되지 않은 URL로 리다이랙션 할 경우 Authorization Code를 탈취 당할 수 있기 때문이다. Authorization Code에 대해서는 추후 설명을 할 것이다.

위의 사진 처름 Redirect URI은 1개 이상을 지정 가능하다.

OAuth 2.0의 동작 메커니즘


사용자가 oo로그인 하기 버튼을 클릭해 로그인을 요청한다.
그러면 Client는 OAuth 프로세스를 시작하기 전에 사용자의 브라우저를 Sercers로 보내야 한다.

이때 클라이언트는 Sercers가 제공하는 Authorization URL에 client_id , client_secret , grant_type , code, redirect_uri, Content_Type 등의 매개변수를 쿼리 스트링으로 포함하여 보낸다.

client_id=961659381789909043&
redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin%2Fapi%2Fauth%2Fdiscord%2Fredirect&
response_type=code&
scope=identify%20email%20connections

이런식으로 URL에 매개변수에 담아서 보낸다.

클라이언트가 식별한 Authorization URL로 이동된 사용자는 제공된 로그인 페이지에서 ID와 PW등을 입력하여 인등 할 것 이다.

로그인 인증에 성공한다면 Authorization Server 는 제공된 Redirect URI로 사용자를 리디렉션시킬 것 이다. 이때 Redirect URI에서는 Authorization Code를 포함하여 사용자를 리다이랙션 시킨다.

여기서 Authorization Code은 Access Token을 저장하고, 이후 Servers에서 사용자의 리소스에 접근하기위한 토큰 이다.

그래서 무슨일이 있어도 Authorization Code은 유출되어서는 안된다. 따라서 제 3자가 가로채지 못하게 HTTPS연결을 통해서만 사용될 수 있다. 이때 요청은 application/x-www-form-urlencoded의 형식에 맞춰 전달해야 한다.

위 과정을 성공하면 400으로 알려준다.

Client는 위 과정에서 발급받고 저장해둔 Resource Owner의 Access Token을 사용하여 제한된 리소스에 접근하고, Resource Owner에게 자사의 서비스를 제공한다.

이 다음에는 Access Token에 대한 내용을 다루어 볼 것이다.

0개의 댓글