본문 바로가기
SpringSecurity OAuth2

<Step 2> OAuth2 권한 부여 타입

by 서영선 2023. 9. 3.

 

 

🚩 OAuth 2.0 Grant Types

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

 

1. Authorization Code Grant Type 
: 권한 코드 부여 타입, 서버 사이드 어플리케이션 (웹 어플리케이션), 보안에 가장 안전한 유형

2. Implicit Grant Type (Deprecated)
: 암시적 부여 타입, 공개 클라이언트 어플리케이션 (SPA 기반 자바스크립트 앱, 모바일 앱),  보안에 취약

3. Resource Owner Password Credentials Grant Type (Deprecated)
: 리소스 사용자 비밀번호 자격 증명 부여 타입, 서버 어플리케이션, 보안에 취약

4. Client Credentials Grant Type
: 클라이언트 자격 증명 권한 부여 타입, UI 혹은 화면이 없는 서버 어플리케이션

5. Refresh Token Grant Type
: 새로고침 토큰 부여 타입, Authorization Code, Resource Ownder Password Type 에서 지원

6. PKCE- enhanced Authorization Code Grant Type
: PKCE 권한 코드 부여 타입, 서버 사이드 어플리케이션, 공개 클라이언트 어플리케이션 

 

 

 

 

 

 

🚗 Authorization Code Grant Type

 

✔ 흐름 및 특징

  1. 사용자가 애플리케이션을 승인하면 인가서버는 Redirect URI로 임시 코드를 담아서 애플리케이션으로 다시 리다이렉션 한다.
  2. 애플리케이션은 해당 임시 코드를 인가서버로 전달하고 액세스 토큰으로 교환한다.
  3. 애플리케이션이 액세스 토큰을 요청할 때 해당 요청을 클라이언트 암호로 인증할 수 있으므로 공격자가 인증 코드를 가로채서 스스로 사용할 위험이 줄어듦
  4. 액세스 토큰이 사용자 또는 브라우저에 표시되지 않고 애플리케이션에 다시 전달하는 가장 안전한 방법이므로 토큰이 다른 사람에게 누출될 위험이 줄어듦

 

1. authorization code 요청 : 인가 서버에게 code를 요청한다.

2. 사용자 인증 & 동의하기 : 사용자의 승인 및 동의하에 인가 서버가 클라이언트에게 코드를 발급한다.

3. Redirect 및 Access Token 교환 요청 : 클라이언트의 권한 부여가 승인되고 그 결과로 토큰을 획득한다.

 

 

 

 

 

🚗 Client Credentials Grant

 

✔ 흐름 및 특징

  1. 애플리케이션이 리소스 소유자인 동시에 클라이언트의 역할을 한다.
  2. 리소스 소유자에게 권한을 위임받아 접근하는 것이 아니라 자기 자신이 애플리케이션을 사용할 목적으로 사용하는 것
  3. 서버 대 서버간의 통신에서 사용할 수 있으며, IOT 와 같은 장비 어플리케이션과의 통신을 위한 인증으로도 사용할 수 있다.
  4. Client id와 Client Secret을 통해 액세스 토큰을 바로 발급 받을 수 있기 때문에 Refresh Token을 제공하지 않는다.
  5. Client 정보를 기반으로 하기 때문에 사용자 정보를 제공하지 않는다.

 

 

 1. Access Token 요청

 

 

 

 

 

 

🚗 Refresh Token Grant

 

✔ 흐름 및 특징

  1. 액세스 토큰이 발급될 때 함께 제공되는 토큰으로서 액세스 토큰이 만료되더라도 함께 발급받았던 리프레시 토큰이 유효하다면, 인증 과정을 처음부터 반복하지 않아도 액세스 토큰을 재발급 받을 수 있다.
  2. 한번 사용된 리프레시 토큰은 폐기되거나 재사용 할 수 있다. 

 

 

1. Refresh Token 요청

 

 

 

 

 

🚗 PKCE - enhanced Authorization Code Grant

 

흐름 및 특징

  1. 코드 교환을 위한 증명 키로서 CSRF 및 권한 부여 코드 삽입 공격을 방지하기 위한 Authorization Code Grant Flow 의 확장 버전이다.
  2. 권한 부여 코드 요청시 Code Verifier 와 Code Challenge를 추가하여 만약 Authorization Code Grant Flow에서 Authorization Code 가 탈취당했을 때 Access Token을 발급하지 못하도록 차단한다.

 

 

1. authorizaiton code 요청

2. Redirect 및 Access Token 교환 요청

 

 

 

 

 

 

 

 

🚩 Open ID Connect

 

✔ Open ID Connect 1.0 은 OAuth 2.0 프로토콜위에 구축한 ID 계층으로 OAuth 2.0을 확장하여 인증 방식을 표준화 한 OAuth 2.0 기반의 인증 프로토콜이다.

 

  • scope 지정시 "openid"를 포함하면 OpenID Connect 사용이 가능하며 인증에 대한 정보는 ID 토큰이라고 하는 JSON 웹 토큰으로 반환된다.

 

  • OpenID Connect는 클라이언트가 사용자 ID를 확인할 수 있게 하는 보안 토큰인 ID Token을 제공한다.

 

 

 

 

✔ ID Token

- ID 토큰은 사용자가 인증되었음을 증명하는 결과물로서 OIDC 요청 시 access token 과 함께 클라이언트에게 전달되는 토큰이다.

- ID 토큰은 JWT로 표현되며 헤더, 페이로드 및 서명으로 구성된다.

- ID 토큰은 개인 키로 발급자가 서명하는 것으로 토큰의 출처를 보장하고 변조되지 않았음을 보장한다.

- 어플리케이션은 공개 키로 ID 토큰을 검증 및 유효성을 검사하고 만료 여부 등 토큰의 클레임을 확인한다.

- 클라이언트는 클레임 정보에 포함되어 있는 사용자명, 이메일을 활용하여 인증 관리를 할 수 있다.

 

 

 

🧨 ID Token  VS  Access Token

  • ID Token은 API 요청에 사용해서는 안되며, 사용자의 신원확인을 위해 사용되어져야 한다.
  • Access Token은 인증을 위해 사용해서는 안되며, 리소스에 접근하기 위해 사용되어져야 한다.

 

 

 

 

'SpringSecurity OAuth2' 카테고리의 다른 글

<Step 3> OAuth2.0 Client  (0) 2023.09.19
<Step 1> OAuth 2.0 개념  (0) 2023.09.02
<Step 0> 선수 지식 - Spring Security  (0) 2023.08.31
[10강] 페이스북 로그인  (0) 2023.08.02
[6강] 구글 로그인 준비  (0) 2023.07.29

댓글