OAuth 등장 배경
OAuth 란?
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과)
구글, 페이스북, 네이버와 같은 다양한 플랫폼의 특정 사용자 데이터에 접근하기 위해 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임(Delegated Authorization)받을 수 있는 표준 프로토콜이다.
즉, 우리 서비스를 이용하는 유저의 타사 플랫폼 정보에 접근하기 위해서 권한을 타사 플랫폼으로부터 위임 받는 것이다.
OAuth 2.0은 1.0에서 알려진 보안 문제 등을 개선한 버전이다.
OAuth의 장점
- OAuth를 이용하는 서비스에서 대중적인 소셜 계정(페이스북, 구글, 등)으로 간편하게 로그인할 수 있다.
- 연동되는 외부 웹 애플리케이션에서 페이스북 구글 등이 제공하는 기능을 간편하게 사용할 수 있다.
OAuth 구성 요소
Resource Owner
- 웹 서비스를 이용하려는 유저, 자원(개인정보)을 소유하는 자, 사용자
Client
- 자사 또는 개인이 만든 애플리케이션 서버
- (클라이언트 라는 이름은 client가 Resource server에게 필요한 자원을 요청하고 응답하는 관계이기 때문)
Authorization Server
- 권한을 부여하는 서버
- 사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받을 수 있다.
- Client는 이 서버로 Authorization Code을 넘겨 Token을 받급 받을 수 있다.
Resource Server
- 사용자의 개인정보를 가지고 있는 애플리케이션(Google, Facebook, Kakao 등) 회사 서버
- Client는 Token을 이 서버로 넘겨 개인정보를 응답 받을 수 있다.
OAuth 흐름
1. 2. 로그인 요청
- Resource Owner가 우리 서비스의 '구글로 로그인하기' 등의 버튼을 클릭해 로그인을 요청한다.
- Client는 OAuth 프로세스를 시작하기 위해 사용자의 브라우저를 Authorization Server로 보내야한다.
- 클라이언트는 이때 Authorization Server가 제공하는 Authorization URL에 필요한 매개변수들을 보낸다. (response_type, client_id, redirect_uri, scope 등)
3. 4. 로그인 페이지로 이동 및 ID, PW 입력
클라이언트가 빌드한 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID와 PW 등을 입력하고 인증을 진행한다.
5. 6. Authorization Code 발급, Redirect URI로 리디렉트
인증되었다면 Authorization Server 는 제공된 Redirect URI로 사용자를 리다이렉트한다. 이때, Redirect URI에 Authorization Code를 포함하여 보낸다.
7. 8. Authorization Code와 Access Token 교환
- Client는 Authorization Server에 Authorization Code를 전달하고, Access Token을 응답받는다.
- Client는 발급받은 Resource Owner의 Access Token을 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용한다.
9. 로그인 성공
위 과정을 성공적으로 마치면 Client는 Resource Owner에게 로그인이 성공하였음을 알린다.
10 ~ 13. Access Token으로 리소스 접근
- Resource Owner가 Resource Server의 리소스가 필요한 기능을 Client에 요청하면,
- Client는 위 과정에서 발급받고 저장해둔 Resource Owner의 Access Token을 사용하여 제한된 리소스에 접근하고, Resource Owner에게 자사의 서비스를 제공한다.
Reference
https://tecoble.techcourse.co.kr/post/2021-07-10-understanding-oauth/
https://hudi.blog/oauth-2.0/
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-OAuth-20-%EA%B0%9C%EB%85%90-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC