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 : OidcLogoutAuthenticationConverter

    • AuthenticationProvider : OidcLogoutAuthenticationProvider

    • AuthenticationSuccessHandler : 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 : OidcUserInfoAuthenticationProvider

    • AuthenticationSuccessHandler : ์ธ์ฆ๋œ OidcUserInfoAuthenticationToken์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OidcUserInfo ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด

    • AuthenticationFailureHandler : OAuth2AuthenticationException๊ณผ ๊ด€๋ จ๋œ OAuth2Error ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด

RequestMatcher

  • /userinfo, GET

  • /userinfo, POST

UserInfo ์—”๋“œํฌ์ธํŠธ ์ ‘๊ทผ ์กฐ๊ฑด

  • UserInfo ์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ์€ AuthorizationFilter ์ดํ›„์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์ฆ์„ ๋ฐ›์€ ์ƒํƒœ์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • UserInfo ์—”๋“œํฌ์ธํŠธ ์š”์ฒญ์‹œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์œผ๋กœ access token ๋ฐœ๊ธ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • UserInfo ์—”๋“œํฌ์ธํŠธ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ํ๋ฆ„ ์š”์ฒญ์—์„œ ๋ฐ›์€ access token์„ ๊ฐ€์ง€๊ณ  ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์น˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์ ธ์•ผ ํ•œ๋‹ค.

img_117.png
  • ๊ทธ๋ฆฌ๊ณ  ์ธ๊ฐ€ ์„œ๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ํ† ํฐ์— ๋Œ€ํ•œ ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์น˜๋„๋ก ํ•œ๋‹ค.

  • 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 ์—”๋“œํฌ์ธํŠธ ์š”์ฒญ ํ๋ฆ„

img_118.png

1. ์ž„์‹œ ์ฝ”๋“œ ํ™•์ธ ํ›„ ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ

  • ์—ฌ๊ธฐ์„œ scope๋Š” openid ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” scope ๋“ค์ด๋‹ค.

  • ๋ฌผ๋ก  ์ธ๊ฐ€ ์„œ๋ฒ„ ์„ค์ •์—์„œ๋„ ๋ชจ๋‘ ์ ์šฉ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

img_119.png
img_120.png

2. UserInfo ์—”๋“œํฌ์ธํŠธ ์š”์ฒญ

img_121.png

3. OidcUserInfoEndpointFilter

  • authenticationConverter์—์„œ SecurityContext์—์„œ Authentication์„ ์–ป์–ด์™€ OidcUserInfoAuthenticationToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

4. ProviderManager -> OidcUserInfoAuthenticationProvider

  • ํ† ํฐ ์œ ํšจ์„ฑ, ์Šค์ฝ”ํ”„ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.

  • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์ธ๊ฐ€ ์„œ๋ฒ„์—์„œ๋Š” ์Šค์ฝ”ํ”„์— openid๊ฐ€ ์—†์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • apply() ๋‚ด๋ถ€ ๊ณผ์ •์—์„œ openid ์ „์šฉ ์Šค์ฝ”ํ”„๊ฐ€ ์•„๋‹Œ scope ๋“ค์€ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค.(sub๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.)

  • ์ตœ์ข… OidcUserInfoAuthenticationToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

img_122.png

5. OidcUserInfoEndpointFilter -> sendUserInfoResponse()

img_123.png
img_124.png

๋งŒ์•ฝ openid ์—†์ด ์š”์ฒญํ•˜๋ฉด?

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

img_125.png

์ด์ „ โ†ฉ๏ธ - Spring Authorization Server(์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ) - Authorization Server Metadata Endpoint

๋ฉ”์ธ โซ

Last updated