- 유저가 oauth2 provider 또는 openid provider를 통해 애플리케이션에 로그인하도록 도와주는 기술
- Spring Security는 공식적으로 Google과 Github을 지원합니다.
1. Spring Boot Sample (Google)
2. Spring Boot Property Mappings
- OAuth2Client 자동설정을 제공
- applicaion.yml ↔️ ClientRegistration 객체의 대응되는 속성으로 간단히 설정할 수 있음
표) applicaion.yml ↔️ ClientRegistration
더보기
Spring Boot | ClientRegistration |
spring.security.oauth2.client.registration.[registrationId] | registrationId |
spring.security.oauth2.client.registration.[registrationId].client-id | clientId |
spring.security.oauth2.client.registration.[registrationId].client-secret | clientSecret |
spring.security.oauth2.client.registration.[registrationId].client-authentication-method | clientAuthenticationMethod |
spring.security.oauth2.client.registration.[registrationId].authorization-grant-type | authorizationGrantType |
spring.security.oauth2.client.registration.[registrationId].redirect-uri | redirectUri |
spring.security.oauth2.client.registration.[registrationId].scope | scopes |
spring.security.oauth2.client.registration.[registrationId].client-name | clientName |
spring.security.oauth2.client.provider.[providerId].authorization-uri | providerDetails.authorizationUri |
spring.security.oauth2.client.provider.[providerId].token-uri | providerDetails.tokenUri |
spring.security.oauth2.client.provider.[providerId].jwk-set-uri | providerDetails.jwkSetUri |
spring.security.oauth2.client.provider.[providerId].issuer-uri | providerDetails.issuerUri |
spring.security.oauth2.client.provider.[providerId].user-info-uri | providerDetails.userInfoEndpoint.uri |
spring.security.oauth2.client.provider.[providerId].user-info-authentication-method | providerDetails.userInfoEndpoint.authenticationMethod |
spring.security.oauth2.client.provider.[providerId].user-name-attribute | providerDetails.userInfoEndpoint.userNameAttributeName |
OIDC Metadata
- 인증 서버의 구성 정보 집합
- 클라이언트가 인증 서버와 통신할 수 있도록 필요한 모든 정보를 담고 있음
표) OIDC Metadata
더보기
항목명 | 설명 |
issuer | 인증 서버의 고유 식별자 |
authorization_endpoint | 사용자 인증 요청을 보내는 URL |
token_endpoint | 클라이언트가 토큰을 받기 위한 URL |
userinfo_endpoint | Access Token으로 사용자 정보 요청하는 URL |
jwks_uri | 공개키를 제공하는 URL (ID Token 검증에 사용됨) |
response_types_supported | 지원하는 response type 목록 (예: code, id_token 등) |
subject_types_supported | 공개/비공개 사용자 식별 방식 (예: public, pairwise) |
id_token_signing_alg_values_supported | ID Token 서명에 사용하는 알고리즘 (예: RS256 등) |
예) kakao
더보기
https://kauth.kakao.com/.well-known/openid-configuration
{
"issuer": "https://kauth.kakao.com",
"authorization_endpoint": "https://kauth.kakao.com/oauth/authorize",
"token_endpoint": "https://kauth.kakao.com/oauth/token",
"userinfo_endpoint": "https://kapi.kakao.com/v1/oidc/userinfo",
"jwks_uri": "https://kauth.kakao.com/.well-known/jwks.json",
"token_endpoint_auth_methods_supported": [
"client_secret_post"
],
"subject_types_supported": [
"public"
],
"id_token_signing_alg_values_supported": [
"RS256"
],
"request_uri_parameter_supported": false,
"response_types_supported": [
"code"
],
"response_modes_supported": [
"query"
],
"grant_types_supported": [
"authorization_code",
"refresh_token"
],
"code_challenge_methods_supported": [
"S256"
],
"claims_supported": [
"iss",
"aud",
"sub",
"auth_time",
"exp",
"iat",
"nonce",
"nickname",
"picture",
"email"
]
}
OpenID Connect Discovery
- 클라이언트가 인증 서버의 정ㅂ조를 자동으로 가져올 수 있게 해주는 매커니즘
- 정해진 표준 URL을 통해 각 OpenID Provider에 서버 정보를 요청할 수 있음
- providerid.issue-uri만 설정하면, ClientRegistration 객체에 값을 자동으로 설정함
3. CommonOAuth2Provider
- 자주 사용하는 OAuth2 Provider들의 설정을 미리 정의해둔 Enum 클래스
- OIDC 메타데이터는 대부분 고정이므로 자동 설정이 가능함 (authorization url, token url, userinfo url 등)
- provider 이름에 의해 enum 상수가 결정됨 (Github, Google, Facebook, Okta 등)
4. Configuring Custom Provider Properties
- OAuth2Provider를 커스텀하는 방법
- 테넌트별로 각기 다른 OAuth2 엔드포인트가 다를 경우 사용
- 기본 제공되는 CustomOAuth2Provider 사용 불가
설정) Okta
더보기
클라이언트별로 endpoint가 다름
- https://your-company.okta.com/oauth2/v1/authorize
- https://your-company.okta.com/oauth2/v1/token
spring:
security:
oauth2:
client:
registration:
okta: # 등록 ID
client-id: okta-client-id
client-secret: okta-client-secret
provider: okta # 아래 provider 설정을 이 registration에 연결
provider:
okta:
authorization-uri: https://your-subdomain.oktapreview.com/oauth2/v1/authorize
token-uri: https://your-subdomain.oktapreview.com/oauth2/v1/token
user-info-uri: https://your-subdomain.oktapreview.com/oauth2/v1/userinfo
user-name-attribute: sub
jwk-set-uri: https://your-subdomain.oktapreview.com/oauth2/v1/keys
- OpenID 메타데이터를 사용하지 않고 직접 설정해주기
5. Overriding Spring Boot Auto-configuration
- Spring Boot는 자동으로 OAuth2 Client를 설정해줌
설정) OAuth2ClientAutoConfiguration
더보기
@AutoConfiguration(before = SecurityAutoConfiguration.class)
@ConditionalOnClass({ EnableWebSecurity.class, ClientRegistration.class })
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@Import({ OAuth2ClientRegistrationRepositoryConfiguration.class, OAuth2WebSecurityConfiguration.class })
public class OAuth2ClientAutoConfiguration {
}
항목 | 설명 |
✅ ClientRegistrationRepository 자동 생성 |
application.yml에 설정한 OAuth2 클라이언트 정보 기반
(InMemoryClientRegistrationRepository) |
✅ SecurityFilterChain 자동 생성 |
http.oauth2Login()이 포함된 SecurityFilterChain 생성
|
✅ 기본 로그인 흐름 자동 구성 |
provider 기반 OAuth2 Login 활성화 (Google, GitHub 등)
|
Register a ClientRegistrationRepository @Bean
- OAuth2Client의 설정 정보를 담고 있는 저장소 인터페이스
- OAuth2Login을 하거나, Access Token을 요청하려면 ClientRegistration 객체 정보를 알아야 함
설정) 커스터마이징
더보기
@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
return new InMemoryClientRegistrationRepository(this.googleClientRegistration());
}
- 직접 Java 코드로 OAuth2 클라이언트 등록
출처
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 6-4. OAuth2 Login: OIDC Logout (1) | 2025.07.18 |
---|---|
[Spring Security] 6-3. OAuth2 Login: Advanced Configuration (0) | 2025.07.17 |
[Spring Security] 6-1. OAuth2 (0) | 2025.07.13 |
[Spring Security] 4-2. Authorization: HttpServletRequests (2) | 2025.07.11 |
[Spring Security] 4-1. Authorization: Architecture (0) | 2025.07.03 |