1. RegisteredClient
- 인가 서버에서 등록된 클라이언트 정보를 나타내는 객체
표) 주요 속성
더보기
필드 | 설명 | 예 |
id |
내부 시스템에서 고유하게 식별되는 UUID
|
|
clientId |
외부 클라이언트가 사용하는 고유 식별자
|
client-a
|
clientSecret |
클라이언트 비밀번호. PasswordEncoder로 인코딩된 값
|
|
clientAuthenticationMethods |
클라이언트 인증 방식
|
client_secret_basic
private_key_jwt |
authorizationGrantTypes |
클라이언트가 사용할 수 있는 grant type 목록
|
refresh_token
token_exchange |
redirectUris |
authorization_code flow에서 사용할 redirect URI
|
|
postLogoutRedirectUris |
OIDC 로그아웃 이후 리디렉션될 URI
|
|
scopes |
요청 가능한 권한 범위
|
"read"
"write" |
clientSettings |
클라이언트 관련 설정
|
consent 필요 여부
PKCE 사용 여부 |
tokenSettings |
토큰 수명, refresh token 재사용 여부 등
|
|
표) 인증 방식 지원 목록 (clientAuthenticationMethods)
더보기
인증 방식 | 설명 |
client_secret_basic |
Authorization 헤더 사용 (기본 방식)
|
client_secret_post |
POST 본문에 client_id, client_secret 전달
|
private_key_jwt |
클라이언트가 private key로 서명한 JWT 전송
|
client_secret_jwt | secret으로 서명한 JWT 전송 |
none | public client (인증 없음) |
표) Grant Type 지원 목록 (authorizationGrantTypes)
더보기
Grant Type | 설명 |
authorization_code | 사용자 인증을 포함한 표준 흐름 |
client_credentials | 클라이언트 자체 인증 (user 없음) |
refresh_token | 기존 토큰 갱신 |
urn:ietf:params:oauth:grant-type:device_code | 디바이스 코드 기반 인증 (TV 등) |
urn:ietf:params:oauth:grant-type:token-exchange |
토큰 교환 (다른 토큰으로 새로운 토큰 발급)
|
2. RegisteredClientRepository
- 인가 서버에 등록된 클라이언트 정보를 저장하고 조회하는 저장소
필요한 상황
- 클라이언트 인증
- grant_type 요청
- token introspection
- 동적 클라이언트 등록
3. OAuth2Authorization
- 인가 서버에서 인가된 상태의 클라이언트를 저장하는 객체 (모든 토큰 정보와 상태)
- 클라이언트가 인가 플로우를 성공적으로 완료했을 떄 생성됨
표) 주요 속성
더보기
필드 | 설명 |
id |
이 Authorization 객체의 고유 식별자
|
registeredClientId |
어떤 클라이언트에게 발급된 것인지 식별 (RegisteredClient ID)
|
principalName |
인증된 사용자 이름 (혹은 client_credentials일 경우 클라이언트 ID)
|
authorizationGrantType |
어떤 grant type으로 발급되었는지 (authorization_code, client_credentials, 등)
|
authorizedScopes | 부여된 scope 목록 |
tokens |
이 authorization에 연관된 token 객체들 (access token, refresh token 등)
|
attributes |
인증 요청 또는 grant type에 따른 부가 정보 (예: OAuth2AuthorizationRequest, 사용자 정보 등)
|
4. OAuth2AuthorizationService
- OAuth2Authorization를 저장/조회/삭제하는 서비스
5. OAuth2AuthorizationConsent
6. OAuth2AuthorizationConsentService
7. OAuth2TokenContext
- OAuth2 토큰 생성 및 커스터마이징 시 필요한 정보를 담고 있는 컨텍스트 객체
- OAuth2TokenGenerator나 OAuth2TokenCustomizer에서 사용됨
8. OAuth2TokenGenerator
- OAuth2TokenContext의 정보를 바탕으로 OAuth2 토큰을 생성하는 컴포넌트
설정
- 토큰 구현체: OAuth2TokenContext.getTokenType()
- Access Token 형식: RegisteredClient.getTokenSettings().getAccessTokenFormat()
표) 토큰 클래스
더보기
OAuth2TokenType 값 | 생성되는 토큰 클래스 |
code | OAuth2AuthorizationCode |
access_token | OAuth2AccessToken |
refresh_token | OAuth2RefreshToken |
id_token (OIDC) | OidcIdToken |
표) Access Token 형식
더보기
설정값 | 생성 방식 | 생성자 클래스 |
SELF_CONTAINED (기본값) | JWT (키+클레임 전달) | JwtGenerator |
REFERENCE | Opaque (키만 전달. 클레임은 서버에 저장됨) | OAuth2AccessTokenGenerator |
9. OAuth2TokenCustomizer
- 토큰이 생성되기 직전에 토큰의 claim 또는 header를 커스터마이징할 수 있게 해주는 인터페이스
- OAuth2TokenGenerator 내부에서 호출됨
설정) OAuth2TokenCustomizer
더보기
@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> jwtCustomizer() {
return context -> {
JwsHeader.Builder headers = context.getJwsHeader();
JwtClaimsSet.Builder claims = context.getClaims();
if (context.getTokenType().equals(OAuth2TokenType.ACCESS_TOKEN)) {
// Customize headers/claims for access_token
} else if (context.getTokenType().getValue().equals(OidcParameterNames.ID_TOKEN)) {
// Customize headers/claims for id_token
}
};
}
10. SessionRegistry
출처
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 8-2. OAuth 2.0 Resource Server: JWT (3) | 2025.07.30 |
---|---|
[Spring Security] 8-1. OAuth2 Resource Server (0) | 2025.07.30 |
[JWT] 2-3. Practical Application: OAuth2 & OpenID (0) | 2025.07.22 |
[Spring Authorization Server] 1. Configuration Model (0) | 2025.07.20 |
[Spring Security] 7-4. OAuth2 Client: Authorized Client Features (0) | 2025.07.20 |