Today I Learned
OAuth
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과)
즉, OAuth는 외부 서비스의 인증 및 권한 부여를 관리하는 개방형 표준 프로토콜이다. 직접 작성한 서버에서 인증을 처리해 주는 것과는 달리, OAuth는 인증을 중개해 주는 메커니즘이다. Naver, Kakao, Google 등을 통한 소셜 로그인 인증 방식이 바로 OAuth 2.0라는 기술을 바탕으로 구현된다.
OAuth 작동 메커니즘
OAuth의 주체
- Resource Owner : OAuth 인증을 통해 소셜 로그인을 하고 싶어 하는 사용자
- Resource Server & Authorization Server
- Resource Server : OAuth2.0을 관리하는 서버(Kakao, Naver 등)의 자원을 관리하는 서버
- Authorization Server : Access Token, Refresh Token을 발급, 재발급하며 권한을 관리하는 서버
- e.g) Kakao 소셜 로그인에 필요한 정보를 가진/인증을 담당하는 Kakao 서버
- Application : Resource Server에 접근해 자원을 가져오고자 하는 어플리케이션
- e.g) Kakao 소셜 로그인을 활용하는 웹 애플리케이션들
- 경우에 따라서 Applicaiton을 Client와 Server로 세분화해서 지칭하기도 한다.
OAuth 인증 방식
현재 대다수가 사용하고 있는 OAuth는 2.0 버전이며, OAuth 2.0의 인증 방식에는 Authorization Code Grant Type, Implicit Grant Type 등 여러가지가 있지만 가장 많이 쓰이는 Authorization Code Grant Type
에 대해 알아보자.
- 사용자가 Application에 접속한다.
- Application에서 Authorization Server로 인증 요청을 보낸다.
- Authorizaiton Server는 유효한 인증 요청인지 확인한 후 Authorization Code를 한다.
- Authorization Server에서 Application으로 Authorization Code를 전달한다.
- Application은 Authorization Server로 발급받은 Authorization Code를 전달한다.
- Authorizaiton Server는 유효한 Authorization Code인지 확인한 후 Access Token을 발급한다.
- Authorization Server에서 Application으로 Access Token을 전달한다.
- Application은 발급받은 Access Token을 담아 Resource Server로 사용자의 정보를 요청한다.
- Resource Server는 Application에게서 전달 받은 Access Token이 유효한 토큰인지 확인한다.
- 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달한다.
OAuth의 장점
- 사용자는 클릭 몇 번만으로 쉽게 가입할 수 있다.
- 정보를 해당 서비스(Application)에 직접 노출하는 것이 아니기 때문에 직접 가입하는 것보다 더 안전하다.
- Application은 회원 정보를 직접적으로 가지고 있지 않기 때문에 회원 정보 관리 또는 유출에 있어서 부담을 덜 수 있다.
- 사용자가 원하는 정보에만 접근을 허락할 수 있어 더 안전하다.
참고