Oauth?
Open Authorization의 약자로 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 위한 개방형 표준이다. 쉽게 말해 사용자가 자신의 비밀번호를 공유하지 않고도 다른 애플리케이션이 특정 작업을 수행하도록 허용하는 인증 방식이다.
주요 용어
Authorization Code | 엑세스 토큰을 얻기 위한 중간 단계로 사용되는 코드 |
Scope | 클라이언트가 리소스에 대하여 어떤 작업을 수행할 수 있는지 정의한 문자열 |
Access Token | 리소스 서버로부터 리소스 소유자 정보를 얻을 때 사용하는 token |
Refresh Token | access token 만료시 갱신을 위한 token |
OAuth2.0 구성
Resource owner | 사용자를 의미하며 클라이언트를 인증 |
Client | OAuth 2.0을 사용하여 리소스에 접근하는 어플리케이션이나 서비스 |
Authorization Server | 권한 서버를 의미, 클라이언트가 리소스 소유자의 권한을 얻을 수 있도록 도와주는 서버로써 사용자 인증, 권한 부여 및 토큰 발급 관리 |
Resource Server | 리소스를 호스팅하는 서버, 클라이언트에게 리소스에 액세스할 권한을 부여하고 실제 데이터를 제공 |
OAuth 2.0 권한 부여 방식
Authorization Code Grant (인가 코드 방식)
- 가장 많이 사용하는 방식
- 카카오나 구글 등이 운영하는 Authorization Server에서 인가 코드를 발급
- 해당 코드를 사용해서 클라이언트가 엑세스 토큰을 받고 리소스에 접근하는 방식
Implicit Grant (암시적 승인 방식)
- 주로 모바일/웹 앱에서 사용
- 인가 코드 없이 바로 엑세스 토큰을 받아옴
- 토큰이 바로 노출되므로 보안이 취약
Password Credentials Grant (비밀번호 방식)
- 사용자가 앱에 직접 아이디와 비밀번호를 입력하여 액세스 토큰을 받는 방식
- 해당 정보를 바탕으로 클라이언트가 인증 서버로 요청 후 엑세스 토큰을 받고 리소스에 접속
Client Credentails Grant (클라이언트 자격 증명 방식)
- 사용자가 아닌, 서버 끼리의 인증에서 주로 사용
- 쇼핑몰 웹사이트가 내부적으로 결제 시스템 서버와 통신할 때 사용돼요. 사용자 개입 없이, 서버 간 데이터를 주고받는 등의 경우
- 서버 자체가 인증을 받은 후 엑세스 토큰을 받아 해당 토큰으로 데이터를 처리
로그인 전체 과정
네이버 OAuth2.0 문서를 참고해서 보면 전체 과정 이해가 쉽다. 참고로 Authorization Code Grant을 바탕으로 로그인이 이루어진다.
