OAuth란?
다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜이다.
아마 다양한 환경에서 알게 모르게 OAuth를 사용한 인증을 해 보았을 것이다.
당장에 생각나는 예시를 들자면
첨부한 인프런의 로그인화면을 보면 인프런 자체의 회원임을 인증하는 방법과 간편 로그인 란의 다양한 플랫폼을 통해 인증하는 방법이 있는 것을 볼 수 있는데 여기서 간편 로그인을 통한 인증이 이 OAuth 프로토콜을 사용한 인증 방법이다.
OAuth에서의 용어 정리
사용자 : Resource Owner
사용하고자 하는 서버 : Client
리소스 제공 서버 : Resource Server
리소스 제공 서버의 인증 서버 : Auth Server
OAuth를 사용하는 이유
신뢰성이 확보되지 않은 서비스에 본인의 정보를 넘기기는 꺼려지는 일이다. 또한 너무 많은 곳에 본인의 정보를 뿌리는 것 또한 부담스러운 일이다. 이러한 상황에 OAuth를 사용하면 사용자(Resource Owner)는 기존에 다른 서비스(Resource Server)에 제공한 나의 정보를 통해 새롭게 사용하길 원하는 서비스(Client)에 대한 권한을 얻을 수 있다.
이러한 특징으로 Client는 Resource Owner가 허용한 권한 내에서 Resource Server에서 데이터를 사용할 수 있다.
OAuth의 절차
1. Client는 OAuth를 사용하기 위해 사전에 Resource Server에게 OAuth에 대한 사용에 대한 동의를 받아 둔다.
-> 이 과정에서 Client ID, Client Secret, Authorized redirect URIs를 얻게 된다.
2. Client가 Resource Owner에게 Resource Server가 요구하는 URI를 담은 링크를 제공하면서 데이터의 사용에 대한 승인을 요구한다.
3. Resource Server는 Resource Owner에게 로그인을 요청하고 링크의 URI를 통해 Client의 Client ID, Client Secret, redirect URI를 통해 옳은 요청인지 확인한 후 Client에게 제공할 데이터를 허용할 범위를 설정할 수 있는 페이지를 보여준다.
Resource Server는 Resource Owner의 ID와 승인한 데이터 권한을 저장하게 된다.
4. Resource Server는 해당 절차가 끝나면 Authorization Code를 포함한 URI로 Resource Owner의 웹 브라우저가 리다이렉트할 수 있도록 요청한다.
5. Resource Owner의 웹 브라우저는 은밀히 Resource Server가 알려준 URI로 이동을 하게 되며 이 과정을 통해 Client는 해당 Resource Owner의 Authorization code의 값을 알게 된다.
6. Client는 Client ID, Client Secret 그리고 grant type에 맞는 데이터를 Resource Server에 제공한다.
(이 예시에서는 Authorization code를 통해 권한을 인증하는 방법[grant_type=authorization_code]을 택하고 있기에 5번 과정에서 얻게된 Authorization code값을 포함한 데이터를 제공한다.)
7. Resource Server 는 Client의 요청에 대해 본인이 가진 정보와 일치하는지 확인 후 일치한다면 Authorization code에 대한 값은 삭제하고 Token을 만들어 Client에게 제공한다.
참고
https://opentutorials.org/course/3405
'Study > Server' 카테고리의 다른 글
[Server] DDD(Domain-Driven Design) 도메인 주도 설계 (0) | 2022.07.15 |
---|---|
[Server] Go Web Server HTTPS 적용하기 (0) | 2022.06.07 |
[Server] 인증(Authentication)과 인가(Authorization), 그리고 JWT(JSON Web Token) (0) | 2022.05.01 |
[Network] HTTP란? 그리고 HTTP 1.1, HTTP 2 (0) | 2021.09.02 |
[Server] REST API란? REST API 알고 쓰기 (0) | 2021.08.31 |