OAuth ( Open Authorization ) 2.0 이란 ?
사용자가 자신의 계정 정보를 직접 공유하지 않아도 서드 파티 애플리케이션들이 제한된 접근을 할 수 있게 해준다.
카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 소셜 로그인 서비스이다. 카카오싱크는 서비스 간편가입 등 카카오 로그인에 더 다양한 확장 기능을 제공하는 비즈니스 설루션이다. 카카오 로그인과 카카오싱크가 제공하는 핵심 기능은 다음과 같다.
구분 | 설명 |
인증(Authentication) | ID와 비밀번호로 사용자 신원을 확인, 각 서비스에 사용자가 카카오계정으로 로그인할 수 있는 기능 지원서비스에서 각 사용자를 식별할 수 있는 고유한 회원번호 제공참고: https://developers.kakao.com/docs/latest/ko/kakaologin/common#oidc 지원, 로그인 세션 대신 사용 가능한 ID 토큰 제공 가능 |
인가(Authorization) | 사용자 개인정보와 같은 자원(Resource)에 대한 접근 권한 획득https://developers.kakao.com/docs/latest/ko/kakaologin/common#authorization를 바탕으로 사용자 정보나 기능에 대한 접근 권한을 https://developers.kakao.com/docs/latest/ko/kakaologin/common#token 형태로 서비스에 부여 |
The authorization code grant type is used to obtain both access
tokens and refresh tokens and is optimized for confidential clients.
Since this is a redirection-based flow, the client must be capable of
interacting with the resource owner's user-agent (typically a web
browser) and capable of receiving incoming requests (via redirection)
from the authorization server.
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI ---->| |
| User- | | Authorization |
| Agent -+----(B)-- User authenticates --->| Server |
| | | |
| -+----(C)-- Authorization Code ---<| |
+-|----|---+ +---------------+
| | ^ v
(A) (C) | |
| | | |
^ v | |
+---------+ | |
| |>---(D)-- Authorization Code ---------' |
| Client | & Redirection URI |
| | |
| |<---(E)----- Access Token -------------------'
+---------+ (w/ Optional Refresh Token)
Note: The lines illustrating steps (A), (B), and (C) are broken into
two parts as they pass through the user-agent.
OAuth 2.0은 인증을 위한 프레임워크로, 아래와 같이 네 가지 주요 인증 방식을 제공한다
1. Authorization Code Grant (인증 코드 부여)
- 개념
- 이 방식은 세 번째 자(Third-party) 애플리케이션에 액세스 토큰을 직접 전달하지 않는다.
- 대신 인증 코드가 클라이언트로 전달되며, 이 코드를 사용하여 액세스 토큰을 얻을 수 있다.
- 사용처
- 웹 애플리케이션이나 모바일 애플리케이션과 같이 클라이언트 비밀(client secret)을 안전하게 보관할 수 있는 환경에서 사용된다.
- 흐름
- 유저가 클라이언트를 통해 리소스 소유자로 로그인한다.
- 인증 서버는 인증 코드를 클라이언트에게 반환한다.
- 클라이언트는 인증 코드와 클라이언트 비밀을 인증 서버에게 전송하여 액세스 토큰을 얻는다.
2. Implicit Grant (암시적 부여)
- 개념
- 이 방식은 클라이언트에게 인증 코드를 제공하는 대신 바로 액세스 토큰을 전달한다.
- 사용처
- 주로 JavaScript를 사용한 클라이언트 사이드 애플리케이션에서 사용된다.
- 이 방식은 클라이언트 비밀을 저장할 수 없는 상황에서 사용된다.
- 흐름
- 유저가 클라이언트를 통해 리소스 소유자로 로그인한다.
- 인증 서버는 액세스 토큰을 바로 클라이언트에게 반환한다.
3. Resource Owner Password Credentials Grant (리소스 소유자 암호 자격증명 부여)
- 개념:
- 이 방식은 사용자의 아이디와 비밀번호를 직접 요구한다.
- 사용자의 자격 증명을 사용하여 액세스 토큰을 얻을 수 있다.
- 사용처:
- 이 방식은 클라이언트가 사용자의 자격증명을 안전하게 처리할 수 있을 때, 특히 사용자와 클라이언트 사이에 높은 신뢰가 있을 때 사용된다.
- 흐름:
- 유저가 아이디와 비밀번호를 클라이언트에게 제공한다.
- 클라이언트는 이 자격 증명을 사용하여 인증 서버에 액세스 토큰을 요청한다.
4. Client Credentials Grant (클라이언트 자격증명 부여)
- 개념:
- 이 방식은 클라이언트 자격증명을 사용하여 액세스 토큰을 얻는 방법이다.
- 사용처:
- 이 방식은 클라이언트 자체의 리소스에 접근할 때 주로 사용된다.
- 흐름:
- 클라이언트는 자신의 ID와 비밀번호를 사용하여 인증 서버에 액세스 토큰을 요청한다.
각 인증 방식은 상황과 요구 사항에 따라 다르게 적용될 수 있으며, 각 방식의 보안 리스크와 트레이드 오프를 고려하여 적절한 방식을 선택해야 한다.
728x90
'Spring boot' 카테고리의 다른 글
OOP 회원과 주문 관리 설계 (3) | 2024.10.01 |
---|---|
Server To Server (0) | 2024.08.16 |