🚩 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
✔ 흐름 및 특징
- 사용자가 애플리케이션을 승인하면 인가서버는 Redirect URI로 임시 코드를 담아서 애플리케이션으로 다시 리다이렉션 한다.
- 애플리케이션은 해당 임시 코드를 인가서버로 전달하고 액세스 토큰으로 교환한다.
- 애플리케이션이 액세스 토큰을 요청할 때 해당 요청을 클라이언트 암호로 인증할 수 있으므로 공격자가 인증 코드를 가로채서 스스로 사용할 위험이 줄어듦
- 액세스 토큰이 사용자 또는 브라우저에 표시되지 않고 애플리케이션에 다시 전달하는 가장 안전한 방법이므로 토큰이 다른 사람에게 누출될 위험이 줄어듦
1. authorization code 요청 : 인가 서버에게 code를 요청한다.
2. 사용자 인증 & 동의하기 : 사용자의 승인 및 동의하에 인가 서버가 클라이언트에게 코드를 발급한다.
3. Redirect 및 Access Token 교환 요청 : 클라이언트의 권한 부여가 승인되고 그 결과로 토큰을 획득한다.
🚗 Client Credentials Grant
✔ 흐름 및 특징
- 애플리케이션이 리소스 소유자인 동시에 클라이언트의 역할을 한다.
- 리소스 소유자에게 권한을 위임받아 접근하는 것이 아니라 자기 자신이 애플리케이션을 사용할 목적으로 사용하는 것
- 서버 대 서버간의 통신에서 사용할 수 있으며, IOT 와 같은 장비 어플리케이션과의 통신을 위한 인증으로도 사용할 수 있다.
- Client id와 Client Secret을 통해 액세스 토큰을 바로 발급 받을 수 있기 때문에 Refresh Token을 제공하지 않는다.
- Client 정보를 기반으로 하기 때문에 사용자 정보를 제공하지 않는다.
1. Access Token 요청
🚗 Refresh Token Grant
✔ 흐름 및 특징
- 액세스 토큰이 발급될 때 함께 제공되는 토큰으로서 액세스 토큰이 만료되더라도 함께 발급받았던 리프레시 토큰이 유효하다면, 인증 과정을 처음부터 반복하지 않아도 액세스 토큰을 재발급 받을 수 있다.
- 한번 사용된 리프레시 토큰은 폐기되거나 재사용 할 수 있다.
1. Refresh Token 요청
🚗 PKCE - enhanced Authorization Code Grant
✔ 흐름 및 특징
- 코드 교환을 위한 증명 키로서 CSRF 및 권한 부여 코드 삽입 공격을 방지하기 위한 Authorization Code Grant Flow 의 확장 버전이다.
- 권한 부여 코드 요청시 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 |
댓글