본문 바로가기
Spring/Security

OAuth 2.0 Grant Type

by 흑시바 2023. 7. 2.

OAuth 2.0에서 "Grant Type"이라는 용어는 애플리케이션이 액세스 토큰을 얻는 방식을 나타낸다. OAuth 2.0은 인증 코드 흐름을 포함하여 여러 권한 부여 유형을 정의한다.

 

권한부여란 클라이언트가 사용자를 대신해서 사용자의 승인하에 인가서버로 부터 권한을 부여받는 것을 의미한다.

1. Authorization Code Grant Type

클라이언트가 사용자를 대신하여 특정 자원에 접근을 요청할 때 사용되는 방식이다.

 

Google, Facebook 및 GitHub와 같은 타사 인증 공급자 또는 자체 OAuth 서버를 사용하여 애플리케이션에 로그인하는 데 사용된다. 리소스 서버에서 보호된 데이터에 접근하기 위해 클라이언트를 인증하고 인증하기 위해 웹에서 사용되는 가장 일반적인 방법이다.

 

사용자가 타사 서비스에 인증하여 코드를 발급받고, 클라이언트는 이를 활용해서 토큰을 발급받는다.

 

인증 흐름 확인하기

2. Implicit Grant Type

자격증명을 저장하기 어려운 클라이언트(SPA 기반 자바스크립트 앱) 등에 최적화된 방식이다.

 

암시적 승인 방식은 권한 부여 승인 코드 과정이 없이 바로 클라이언트에 토큰이 발급된다.

응답과 효율성은 높아지지만 공개 클라이언트라서 보안상 취약하다는 단점이 있다.


하지만 매우 간단한 사용방식이라서 아직도 많이 사용된다.

 

인증 흐름 확인하기

3. Resource Owner Password Credentials Grant Type

사용자의 아이디 비밀번호를 활용해서 토큰을 획득하는 방식이다.

 

사용자의 아이디와 비밀번호가 네트워크에 노출되므로 보안이 취약하다. 따라서, 클라이언트가 타사 외부 프로그램인 경우는 해당 방식을 적용하면 안 된다. 서비스를 제공하는 애플리케이션을 자신이 제공하는 경우에만 사용한다.

 

인증 흐름 확인하기

4. Client Credentials Grant Type

클라이언트의 자격증명으로만 토큰을 획득하는 방식이다.


클라이언트의 id와 secret만 있으면 인가 서버로부터 바로 토큰을 발급받는다.

 

인증 흐름 확인하기

5. Refresh Token Grant Type

이전 토큰(access Token)이 만료되거나 유효하지 않은 경우 새 액세스 토큰을 얻는 데 사용하는 방식이다.


access Token에는 만료 기간이 존재한다. 기존에는 해당 기간이 만료되면 권한 부여절차를 다시 해야 했지만, refresh Token을 가지고 있다면 이런 과정을 생략하고 새로운 access Token을 발급받을 수 있다.

 

인증 흐름 확인하기

6. PKCE-enhanced Authorization Code Grant Type

액세스 토큰을 발급받기 전에 인증 코드가 인증되었음을 인증 서버에 증명해야 하는 방식이다.


기존 Authorization Code Grant Type에서 코드를 발급받을 때에 추가로 해시된 값을 전달해서 코드를 발급받는다.

 

토큰을 발급받을 때 기존 과정에 추가로 해시 이전 값(기존 값)과 해시 알고리즘 값을 같이 전달하며 인가서버에서 저장한 값과 일치하는지 비교하는 과정을 추가한다.

 

인증 흐름 확인하기

 

REFERENCE

https://auth0.com/docs/get-started/applications/application-grant-types

https://cloudentity.com/developers/basics/oauth-framework/oauth-overview/

https://frontegg.com/blog/oauth-grant-types

댓글