728x90
1. OAuth2?
특정 어플리케이션에서 사용자의 인증을 직접 처리하는 것이 아니라 사용자 정보를 보유하고 있는 신뢰할만한 써드파티 애플리케이션(Google, Facebook등)에서 사용자의 인증을 대신 처리해 주고 Resource에 대한 자격 증명용 토큰을 발급 후 Client가 해당 토큰을 이용해 써드파티 애플리케이션의 서비스를 이용하게 해주는 방식이다.
또한 제공받은 인증정보를 크리덴셜 저장소에 저장하지 않는다.
2. OAuth2 인증 컴포넌트들의 역할
- Resource Owner
- Resource를 사용하고자 하는 소유자(서비스를 이용하는 사용자)
- Client
- Resource Owner를 대신해 보호된 Resource에 액세스하는 애플리케이션
- 예들들어 내가 A라는 애플리케이션을 통해 Google의 소셜로그인을 이용하면 애플리케이션 A가 Client가 된다.
- Client는 서비스를 이용하고자 하는 쪽이다.
- Resource Server
- Client의 요청을 수락하고 Resource Owner에게 해당하는 Resource를 제공하는 서버
- Authorization Server
- Client가 Resource Server에 접근할 수 있는 권한을 부여하는 서버
3. OAuth2 인증 프로토콜에서 사용되는 용어
- Authorization Grant
- Client 애플리케이션이 Access Token을 얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜을 의미한다.
- Access Token
- Client가 Resource Server에 있는 보호된 Resource에 액세스하기 위해 사용하는 자격 증명용 토큰이다.
- Scope
- 주어진 액세스 토큰을 사용하여 액세스할 수 있는 Resource의 범위를 의미한다.
- Authorization Grant 유형
Aithorization Grant유형에는 4가지 유형이 있다.
(Authorization Grant, Implicit Grant Type, Client Credentials, Resource Owner Password Credentials)
- Authorization Code Grant : 권한 부여 승인 코드 방식
- 권한 부여 승인을 위해 자체 생성한 Authorization Code 를 전달하는 방식으로 가장 많이 쓰이고 기본이 되는 방식이다.
- Refresh Token를 사용할 수 있다.
- Resource Owner는 소셜 로그인 버튼을 누르는 등의 서비스 요청을 Client에게 전송한다.
- Client는 Authorization Server에 Authorization Code를 요청한다. 이 때 미리생성한 Client Id, Redirect URI, 응답타입을 함께 전송한다.
- Resource Owner는 로그인 페이지를 통해 로그인을 진행한다.
- 로그인이 확인되면 Authorization Server는 Authorization Code를 Client에서 전달한다.(이 전에 요청과 함께 전달한 Redirect URI로 Code를 전달한다.)
- Client는 전달받은 Authorization Code를 이용해 Access Token 발급을 요청한다. Access Token을 요청할 때 미리 생성한 Client Secret, Redirect URI, 권한부여방식, Authorization Code를 함께 전송한다.
- 요청 정보를 확인한 후 Redirect URI로 Access Token을 발급한다.
- Client는 발급받은 Access Token을 이용해 Resource Sercer에 Resource를 요청한다.
- Access Token을 확인한 후 요청받은 Resource를 Client에게 전달한다.
- 완료!
- Implicit Grant : 암묵적 승인 방식
- Authorization Code없이 바로 Access Token을 발급하는 방식
- 자격증명을 안전하게 저장하기 힘든 Client에게 최적화된 방식이다.
- Refresh Token은 사용이 불가능하며, 이 방식에서 Authorization Sercer는 Client Secret을 통해 클라이언트 인증과정을 생략한다.
- Authorization Code없이 바로 Access Token을 발급하는 방식
- Resource Owner는 로그인 버튼을 누르는 등의 서비스 요청을 Client(애플리케이션)에게 전송한다.
- Client는 Authorization Server에게 접근 권한을 요청한다. 요청과 함께 미리 생성한 Client ID, Redirect URI, 응답타입을 전송한다.(이 때에는 Authorization code를 획득하기 위한 요청이 아니다.)
- Resource Owner는 로그인 페이지를 통해 로그인을 진행한다.
- 로그인이 확인되면 Authorization Server는 Client에게 Access Token을 전달한다.
- Client는 Access Token을 이용해 Resource Server에게 Resource를 요청한다.
- Access Token을 확인한 후 요청받은 Resource를 전달한다.
- 완료!
- Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
- 간단하게 로그인 시 필요한 정보(username, password)로 Access Token을 발급받는 방식이다.
- 예를들어, 네이버 계정으로 네이버 웹툰, 카카오 계정으로 카카오 맵 등의 애플리케이션에 로그인하는 경우가 Resource Owner Password Credential Grant에 해당한다.
- Resource Owner는 로그인 버튼을 누르는 등의 서비스 요청을 Client에게 전송한다. 이 때 로그인에 필요한 정보(Username, Password)를 이용해 요청한다.
- Client에서는 Resource Owner에게서 전달받ㄷ은 로그인 정보를 통해 Authotization Server에 Access Token을 요청한다.
- 요청과 함께 온 정보들을 확인한 후 Client에게 Access Token을 전달한다.
- Client는 Access Token을 이용하여 Resource Server에게 Resource를 요청한다.
- Access Token을 확인한 후 요청받은 Resource를 전달한다.
- 완료!
- Client Credentials Grant : 클라이언트 자격 증명 승인 방식
- Client 자신이 관리하는 Resource, Authorization Server에 해당 Client를 위한 제한된 Resource 접근 권한이 서러정되어 있는 경우 사용 가능한 방식이다.
- 이 방식은 자격 증명을 안전하게 보관할 수 있는 Client에서만 사용되어야 하고, Refresh Token은 사용 불가하다.
- Client 자신이 관리하는 Resource, Authorization Server에 해당 Client를 위한 제한된 Resource 접근 권한이 서러정되어 있는 경우 사용 가능한 방식이다.
- Client가 Authorization Server에 Access Token을 요청한다.
- 요청된 토큰을 Client에게 다시 전달해 준다.
- Client가 Access Token을 이용해 Resource Server에게 Resource를 요청한다.
- Access Token을 확인한 후 요청 받은 Resource를 전달한다.
'JAVA > 인증&보안' 카테고리의 다른 글
[인증/보안] JWT TCP, CIA, RFC (0) | 2023.04.27 |
---|---|
[인증/보안] JWT(JSON Web Token) (0) | 2022.11.30 |
[인증/보안] Spring Security (0) | 2022.11.30 |
[인증/보안] 기초 (0) | 2022.11.30 |