Open Authorization
인터넷 사용자들이 비밀번호를 제공하지 않고, 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개방형 표준 방법이다.
이러한 메커니즘은 구글, 네이버, 카카오 등이 사용하고 있으며 타사 애플리케이션 및 웹사이트의 계정에 대한 정보를 공유할 수 있도록 허용해 준다.
OAuth 프로토콜
웹 서비스를 개발할 때 인증 과정을 구현할 것인가는 가장 중요한 문제이다.
인증은 보안에 있어서 가장 핵심적인 문제이며, 잘못하면 사용자의 소중한 개인 정보가 유출될 수 있는 위험도 있기 때문에 개발자는 굉장히 신중히 설계를 해야 한다.
하지만 OAuth는 개발자가 직접 인증 과정을 구현하는 것이 아니기 때문에 개발자의 고민을 덜어주며 인증 구현을 간편하게 구현할 수 있다.
Third-Party 프로그램 (내가 개발하는 웹)이 Client를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임받는 방식을 OAuth 방식이라고 한다.
OAuth 용어
Resource Owner
리소스 소유자를 말한다.
해당 플랫폼(구글, 네이버, 카카오 등)에서 리소스(계정)를 소유하고 있는 사용자를 의미한다.
내가 개발한 웹서비스를 이용하는 유저
Authorization Server
Resource Owner를 인증하고, 내가 개발한 웹 서비스에게 Access Token을 발급해 주는 서버이다.
외부 플랫폼 리소스에 접근할 수 있는지 인증을 하는 서버를 의미한다.
Resource Server
구글, 네이버, 카카오 등과 같이 보호되는 리소스를 가지는 서버를 말한다.
Client
내가 개발하는 웹 서비스가 Client이다.
Resource Owner를 대신하여 Authorization Server와 Resource Server에 접근하는 주체가 되기 때문에 그들 입장에서는 Client 가 된다.
애플리케이션 등록
OAuth 2.0 서비스를 이용하기 전에 선행되어야 하는 작업이 있다.
Client를 Resource Server에 등록해야 하는 작업이다. 이때, Redirect URI를 등록해야 한다.
Redirect URI는 사용자가 OAuth 2.0 서비스에서 인등을 마치고 사용자를 Redirction시킬 위치이다.
Redirect URI
OAuth는 인증이 성공한 사용자를 사전에 등록된 Redirect URI로만 이동시킨다.
승인되지 않은 URI로 이동될 경우, Authorization Code를 중간에 탈취당할 위험성이 있기 때문이다.
Redirect URI는 기본적으로 보안을 위해 https만 허용된다.
Client ID, Client Secret
등록과정을 마치면 Client Id, Client Secret을 얻을 수 있다.
발급된 Id와 Secret은 Access Token을 획득하는 데 사용된다.
이때, Secret은 절대 유출되어서는 안 된다.
동작 메커니즘
1 ~ 4. 유저가 소셜 로그인을 하는 과정이다.
5 ~ 6. 소셜로그인을 마치게 되면 유저에게 Authorization Code를 발급하게 되는데 그 Code를 가지고 Redirect URI로 리다이렉트 된다.
7 ~ 8. Code를 넘겨받은 Client는 Code와 Id, Secet을 가지고 Access Token을 요청하고 발급받아서 DB에 저장한다.
이후로는 Access Token을 가지고 접근 가능한 Resource에 접근할 수 있고, 정해진 Scope 내에서 다양한 리소스를 이용할 수 있다.(연락처를 가져오거나, 메일함 접근 등등)
참고
https://velog.io/@choidongkuen/OAuth02-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
'멋진 개발자 > ETC..' 카테고리의 다른 글
개발자 성장 기록 41 - 단위 테스트와 TDD(테스트 주도 개발) (0) | 2024.04.06 |
---|---|
개발자 취준 기록 36 - 프로세스와 스레드 (0) | 2024.03.31 |
개발자 취준 기록 30 - SOLID OOP 5대 원칙 (0) | 2024.03.25 |
[항해 취업코스] 개발자 취준 기록 26 - 객체 지향 프로그래밍 (0) | 2024.03.20 |