✏️ OAuth 란 무엇인가?
로그인을 할 때 이런 화면을 만나 보았을 것이다. 애플리케이션을 이용할 때 구글, 카카오, 네이버 등 제3의 서비스에서 저장된 계정 정보로 로그인할 수 있는 기능은 OAuth라는 인증 표준을 통해 구현되었다.
OAuth란 Open Authorization의 약자이다. 애플리케이션이 특정 시스템의 보호된 리소스에 접근하기 위해, 사용자 인증(Authentication)을 통해 사용자 리소스 접근 권한(Authorization)을 위임받는 것을 의미한다.
인증(Authentication)
사용자가 본인의 신원을 입증하는 것, 예를 들면 로그인
인가(Authorization)
사용자 권한을 확인하는 것
✏️ OAuth의 핵심 주체
(1) Resource Owner
리소스 소유자를 말한다. 여기서 리소스란 외부 소셜 서비스(API)를 의미한다.
즉, 해당 플랫폼에서 리소스를 소유하고 있는 사용자를 의미한다. (구글, 카톡 등 해당 플랫폼에서 리소스를 가지고 있으면서 우리의 웹 서비스를 이용하고자 하는 유저)
애플리케이션의 리소스 공유 요청을 허가할 수 있다.
(2) Authorization Server
Authorization Server는 Resource Owner를 인증하고, 우리가 개발한 웹 서비스에게 Access Token을 발급해 주는 서버이다.
즉, 외부 플랫폼 리소스에 접근할 수 있는지 검증하는 서버를 의미한다. 허가를 담당한다.
(3) Resource Server
구글, 페이스북, 카카오, 네이버와 같이 보호되는 리소스를 가지는 서버를 말한다. 실제 사용자 리소스를 보유하고 있는 서버이다.
(4) Client
Client란 Resource Owner를 대신해 Authorization Server & Resource Server에 접근하는 주체이다. 즉, 우리가 개발하려는 서비스를 말한다.
✏️ OAuth 2.0 동작 메커니즘
먼저, 우리가 개발하려는 웹 서비스(Client)를 Resource Server에 등록해야 한다.
이때, Redirect URI도 함께 등록해야 하는데, 해당 위치는 사용자가 OAuth 2.0 서비스에서 인증을 마치고 리다이렉션 시킬 위치이다.
웹 서비스 등록을 성공적으로 마치면, Client ID 와 Client Secret을 얻을 수 있다. 이 두 정보는 Access Token을 얻는데 중요한 역할을 함으로, 외부로 유출이 절대 되면 안 된다❌
📌 1 ~ 2 로그인 요청
1. 로그인 요청
- Resource Owner가 우리가 설계한 웹 서비스에서 '카카오로 로그인하기' 등의 버튼을 클릭하여 로그인을 요청한다.
2. 로그인요청 (with Client ID, Redirect URI, Response Type, Scope)
- Client는 OAuth 프로세스를 시작하기 위해 Resource Owner의 브라우저를 Authorization Server로 보낸다.
- Client는 이때 Authorization URL에 response_type, client_id, redirect_uri, scope 등의 매개변수를 쿼리 스트링으로 포함하여 보낸다.
- respone_type : 반드시 code로 값을 설정해야 한다. 인증이 성공할 경우 Client는 Authorization Code를 받는다.
- client_id : 웹 서비스를 Resource Server에 등록했을 때 발급받은 Client ID를 의미
- redirect_uri : 웹 서비스를 Resource Server에 등록했을 때 등록한 redirect URI 의미
- scope : Client가 부여받은 리소스 접근 권한 의미
📌 3 ~ 4 로그인 페이지 제공 및 ID/PW 입력
Client로부터 Authorization URL로 이동된 Resource Owner은 제공된 로그인 페이지에서 ID/PW를 입력하여 인증한다.
📌 5 ~ 6 Authorization Code 발급 및 Redirect URI로 리다이렉트 됨
Authorization URL에서 인증이 성공하면, Authorization Server는 기존에 설정한 Redirect URL에 Authorization Code를 포함하여 사용자를 Redirect URI로 리다이렉션 시킨다.
Authorization Code
리소스 접근을 위한 Access Token을 획득하기 위해 사용하는 임시코드이다. 수명이 매우 짧다.
📌 7 ~ 8 Authorization Code를 이용하여 Access Token발급
Client는 다시 Authorization Server에 Authorization Code를 전달하고, Access Token을 발급받는다.
Client는 자신이 발급받은 Resource Owner의 Access Token을 DB에 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용한다.
📌 9. 로그인 성공
앞선 과정들을 모두 성공적으로 마치면 Client는 Resource Owner에게 로그인이 성공했음을 알린다.
이제 Access Token을 사용하여 접근 가능한 Resource에 접근할 수 있다.
📌 10 ~ 13 서비스 요청 및 Access Token을 이용하여 리소스 접근 및 이용
Access Token을 발급받았기 때문에 정해진 Scope 내에서 다양한 리소스를 이용할 수 있다.
✏️ OAuth의 문제와 한계
OAuth 인터페이스는 유저 정보에 대한 표준이 없어 각 서비스 제공자마다 유저데이터를 다른 방식으로 넘겨주기 때문에 클라이언트가 각각의 인터페이스에 개별적으로 대응해야 한다는 단점이 있다.
'Knowledge > 이론' 카테고리의 다른 글
동기 / 비동기 (0) | 2024.03.23 |
---|---|
SMTP (단순 전자우편 전송 규약) (0) | 2024.03.22 |
Polling / Long Polling / SSE / WebSocket 정리 (0) | 2024.03.20 |
MySQL 과 MariaDB 차이점 (0) | 2024.03.20 |
데이터베이스 조인 (Join) (1) | 2024.03.12 |