OpenID
Spring Authorization Server - ์๋ํฌ์ธํธ ํ๋กํ ์ฝ
OpenID Connect 1.0 Endpoint
OidcProviderConfigurationEndpointConfigurer
OpenID Connect 1.0 Provider ์๋ํฌ์ธํธ์ ๋ํ ์ง์์ ์ ๊ณตํ๋ค.
OidcProviderConfigurationEndpointFilter๋ฅผ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ OAuth2 ์ธ์ฆ ์๋ฒSecurityFilterChain๋น์ ๋ฑ๋กํ๋ค.OidcProviderConfigurationEndpointFilter์OidcProviderConfiguration์ ๋ฐํํ๋ ํํฐ๋ค.
RequestMatcher
/.well-known/openid-configuration, GET
OidcLogoutEndpointConfigurer
OpenID Connect 1.0 Logout ์๋ํฌ์ธํธ์ ๋ํ ์ง์์ ์ ๊ณตํ๋ค.
OidcLogoutEndpointFilter๋ฅผ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ OAuth2 ์ธ์ฆ ์๋ฒSecurityFilterChain๋น์ ๋ฑ๋กํ๋ค.OidcLogoutEndpointFilter๋ ๋ค์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.AuthenticationConverter :
OidcLogoutAuthenticationConverterAuthenticationProvider :
OidcLogoutAuthenticationProviderAuthenticationSuccessHandler :
OidcLogoutAuthenticationToken์ ์ฒ๋ฆฌํ๊ณ ๋ก๊ทธ์์์ ์ํํ๋ ๋ด๋ถ ๊ตฌํ์ฒดAuthenticationFailureHandler :
OAuth2AuthenticationException๊ณผ ๊ด๋ จ๋OAuth2Error์๋ต์ ๋ฐํํ๋ ๋ด๋ถ ๊ตฌํ์ฒด
RequestMatcher
/connect/logout, GET/connect/logout, POST
OidcUserInfoEndpointConfigurer
OpenID Connect 1.0 UserInfo ์๋ํฌ์ธํธ์ ๋ํ ์ง์์ ์ ๊ณตํ๋ค.
OidcUserInfoEndpointFilter๋ฅผ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ OAuth2 ์ธ์ฆ ์๋ฒSecurityFilterChain๋น์ ๋ฑ๋กํ๋ค.OidcUserInfoEndpointFilter๋ ๋ค์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.AuthenticationConverter :
SecurityContext์์Authentication์ ์ป์ดOidcUserInfoAuthenticationToken์ ๋ฐํํ๋ ์ต๋ช ๊ฐ์ฒดAuthenticationProvider :
OidcUserInfoAuthenticationProviderAuthenticationSuccessHandler : ์ธ์ฆ๋
OidcUserInfoAuthenticationToken์ ์ฒ๋ฆฌํ๊ณOidcUserInfo์๋ต์ ๋ฐํํ๋ ๋ด๋ถ ๊ตฌํ์ฒดAuthenticationFailureHandler :
OAuth2AuthenticationException๊ณผ ๊ด๋ จ๋OAuth2Error์๋ต์ ๋ฐํํ๋ ๋ด๋ถ ๊ตฌํ์ฒด
RequestMatcher
/userinfo, GET/userinfo, POST
UserInfo ์๋ํฌ์ธํธ ์ ๊ทผ ์กฐ๊ฑด
UserInfo ์๋ํฌ์ธํธ ํ๋กํ ์ฝ์
AuthorizationFilter์ดํ์ ์์นํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ฆ์ ๋ฐ์ ์ํ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.UserInfo ์๋ํฌ์ธํธ ์์ฒญ์ ์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก
access token๋ฐ๊ธ์ด ๊ฐ๋ฅํ๋ค.UserInfo ์๋ํฌ์ธํธ๋ ๊ถํ ๋ถ์ฌ ํ๋ฆ ์์ฒญ์์ ๋ฐ์
access token์ ๊ฐ์ง๊ณ ์ธ๊ฐ ์๋ฒ๋ก ์์ฒญํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋๋ก ๊ตฌ์ฑ๋์ด์ ธ์ผ ํ๋ค.

๊ทธ๋ฆฌ๊ณ ์ธ๊ฐ ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์ ํตํด ํ ํฐ์ ๋ํ ์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋๋ก ํ๋ค.
OpenID Connect 1.0 UserInfo ์๋ํฌ์ธํธ์๋ ํ ํฐ์ ๋์ฝ๋ฉํ๊ณ ๊ฒ์ฆํ๊ธฐ ์ํ
JwtDecoder๋น์ด ํ์ํ๋ค
@Bean
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =
new OAuth2AuthorizationServerConfigurer();
http.apply(authorizationServerConfigurer);
...
http.oauth2ResourceServer(resourceServer -> resourceServer.jwt(Customizer.withDefaults()));
return http.build();
}
@Bean
public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
}UserInfo ์๋ํฌ์ธํธ ์์ฒญ ํ๋ฆ

1. ์์ ์ฝ๋ ํ์ธ ํ ์ก์ธ์ค ํ ํฐ ์์ฒญ
์ฌ๊ธฐ์ scope๋ openid ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ scope ๋ค์ด๋ค.
๋ฌผ๋ก ์ธ๊ฐ ์๋ฒ ์ค์ ์์๋ ๋ชจ๋ ์ ์ฉ๋์ด ์์ด์ผ ํ๋ค.


2. UserInfo ์๋ํฌ์ธํธ ์์ฒญ

3. OidcUserInfoEndpointFilter
authenticationConverter์์SecurityContext์์Authentication์ ์ป์ด์OidcUserInfoAuthenticationToken์ ๋ฐํํ๋ค.
4. ProviderManager -> OidcUserInfoAuthenticationProvider
ํ ํฐ ์ ํจ์ฑ, ์ค์ฝํ ๋ฑ์ ํ์ธํ๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ ์ธ๊ฐ ์๋ฒ์์๋ ์ค์ฝํ์
openid๊ฐ ์์ผ๋ฉด ์์ธ๋ฅผ ๋ฐํํ๋ค.apply()๋ด๋ถ ๊ณผ์ ์์openid์ ์ฉ ์ค์ฝํ๊ฐ ์๋ scope ๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ค.(sub๋ง ๋จ๊ฒ ๋๋ค.)์ต์ข
OidcUserInfoAuthenticationToken์ ๋ฐํํ๋ค.

5. OidcUserInfoEndpointFilter -> sendUserInfoResponse()


๋ง์ฝ openid ์์ด ์์ฒญํ๋ฉด?
์์ธ๊ฐ ๋ฐ์ํ๋ค.

Last updated