특정 애플리케이션(Client)에서 사용자의 인증을 직접 처리하는 것이 아니라 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google, Facebook 등)에서 사용자의 인증을 대신 처리해 주고 Resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식입니다.
- 동작 방식
Resource Owner가 Client 역할을 하는 웹 애플리케이션에게 OAuth2 인증을 요청
Client는 Resource Owner가 Resource Owner의 계정 정보를 관리하고 있는 써드 파티 애플리케이션의 로그인 페이지로 리다이렉트
Resource Owner는 로그인 인증 진행하고 성공하면
Authorization Server가 Resource Owner의 로그인 인증이 성공적으로 수행되었음을 증명하는 Access Token을 Client에게 전송
Access Token을 전달 받은 Client는 이제 Resource Owner의 대리인 역할을 수행할 수 있게되었으므로, Resource Server에게 Resource Owner 소유의 Resource를 요청
Resource Server는 Client가 전송한 Access Token을 검증해서 Client가 Resource Owner의 대리인으로써의 자격이 증명되면 Resource Owner의 Resource를 Client에게 전송
Authorization Grant 유형
Authorization Code Grant : 권한 부여 승인 코드 방식
Authorization Code Grant는 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식으로, 가장 많이 쓰이고 기본이 되는 방식입니다.
Authorization Code Grant 방식에서는 Refresh Token을 사용할 수 있습니다.
권한 부여 승인 요청시 응답 타입(response_type)을 code로 지정하여 요청합니다.
출처 Authorization Code Grant - WSO2 API Manager Documentation 4.1.0
Implicit Grant : 암묵적 승인 방식
별도의 Authorization Code 없이 바로 Access Token을 발급하는 방식입니다.Refresh Token 사용이 불가능하며, 이 방식에서 Authorization Server는 Client Secret을 통해 클라이언트 인증 과정을 생략합니다.
이는 자격증명을 안전하게 저장하기 힘든 Client(자바스크립트 등 스크립트 언어를 사용하는 브라우저)에게 최적화된 방식입니다.
권한 부여 승인 요청시 응답 타입(response_type)을 token으로 지정하여 요청합니다.
출처 Implicit Grant - WSO2 API Manager Documentation 3.2.0
Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
간단하게 로그인 시 필요한 정보(username, password)로 Access Token을 발급받는 방식입니다. 자신의 서비스에서 제공하는 애플리케이션의 경우에만 사용되는 인증 방식으로, Refresh Token의 사용도 가능합니다.
예를 들어 네이버 계정으로 네이버 웹툰 애플리케이션에 로그인, 카카오 계정으로 카카오 지도 애플리케이션에 로그인하는 경우가 Resource Owner Password Credential Grant에 해당합니다.
다시 말해 Authorization Server, Resource Server, Client가 모두 같은 시스템에 속해 있을 때만 사용이 가능합니다.
출처 Resource Owner Password Credentials Grant - WSO2 Identity Server Documentation
Client Credentials Grant : 클라이언트 자격 증명 승인 방식
Client 자신이 관리하는 Resource 혹은 Authorization Server에 해당 Client를 위한 제한된 Resource 접근 권한이 설정되어 있는 경우 사용 가능한 방식입니다.
이 방식은 자격 증명을 안전하게 보관할 수 있는 Client에서만 사용되어야 하며, Refresh Token의 사용은 불가능합니다.