목차
0. 사전 기반 지식
사용자가 자신의 계정 정보를 직접 공유하지 않아도 서드 파티 애플리케이션들이 제한된 접근을 할 수 있게 해준다.
카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 소셜 로그인 서비스이다. 카카오싱크는 서비스 간편가입 등 카카오 로그인에 더 다양한 확장 기능을 제공하는 비즈니스 설루션이다. 카카오 로그인과 카카오싱크가 제공하는 핵심 기능은 다음과 같다.
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
구분 | 설명 |
인증(Authentication) | ID와 비밀번호로 사용자 신원을 확인, 각 서비스에 사용자가 카카오계정으로 로그인할 수 있는 기능 지원서비스에서 각 사용자를 식별할 수 있는 고유한 회원번호 제공참고: OpenID Connect 지원, 로그인 세션 대신 사용 가능한 ID 토큰 제공 가능 |
인가(Authorization) | 사용자 개인정보와 같은 자원(Resource)에 대한 접근 권한 획득 사용자 동의를 바탕으로 사용자 정보나 기능에 대한 접근 권한을 토큰 형태로 서비스에 부여 |
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와 비밀번호를 사용하여 인증 서버에 액세스 토큰을 요청한다.
각 인증 방식은 상황과 요구 사항에 따라 다르게 적용될 수 있으며, 각 방식의 보안 리스크와 트레이드 오프를 고려하여 적절한 방식을 선택해야 한다.
'Spring Boot > 추가 개념' 카테고리의 다른 글
OOP 회원과 주문 관리 설계 (2) | 2024.10.01 |
---|---|
API 설계 및 모범 사례 (1) | 2024.09.27 |
스프링부트 블로그 만들기 테스트 (0) | 2024.08.19 |
Bank 카카오 소셜로그인 처리 (1) | 2024.08.19 |
Server To Server 개념을 알아보자. (0) | 2024.08.14 |