TokenEndpoint

Spring Authorization Server - ์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ

OAuth 2.0 Token Endpoint

OAuth2TokenEndpointConfigurer

  • OAuth2 ํ† ํฐ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • OAuth2 ํ† ํฐ ์š”์ฒญ์— ๋Œ€ํ•œ ์ „์ฒ˜๋ฆฌ, ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ ๋ฐ ํ›„์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • OAuth2TokenEndpointFilter๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋ฅผ OAuth2 ์ธ์ฆ ์„œ๋ฒ„ SecurityFilterChain ๋นˆ์— ๋“ฑ๋กํ•œ๋‹ค.

  • ์ง€์›๋˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์€ authorization_code, refresh_token, client_credentials, device_code ์ด๋‹ค.

OAuth2TokenEndpointFilter

  • ํด๋ผ์ด์–ธํŠธ์˜ ํ† ํฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    • DelegatingAuthenticationConverter - ๊ฐ ํŠน์ • ์œ ํ˜•์˜ AuthenticationConverter๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•œ๋‹ค.

      • OAuth2AuthorizationCodeAuthenticationConverter

      • OAuth2RefreshTokenAuthenticationConverter

      • OAuth2ClientCredentialsAuthenticationConverter

      • OAuth2DeviceCodeAuthenticationConverter

      • ๊ฐ ์ปจ๋ฒ„ํ„ฐ๋Š” HttpServletRequest ์ •๋ณด๋ฅผ ~~AuthenticationToken ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • AuthenticationProviders

      • OAuth2AuthorizationCodeAuthenticationProvider

      • RefreshTokenAuthenticationProvider

      • ClientCredentialsAuthenticationProvider

      • OAuth2DeviceCodeAuthenticationProvider

      • ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์— ๋”ฐ๋ผ ํ† ํฐ์„ ๋ฐœํ–‰ํ•˜๋Š” AuthenticationProvider ๊ตฌํ˜„์ฒด ๋“ค์ด๋‹ค.

    • AuthenticationSuccessHandler

      • ์ธ์ฆ๋œ OAuth2AccessTokenAuthenticationToken์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด๋กœ ์ธ์ฆ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ OAuth2AccessTokenResponse๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • AuthenticationFailureHandler

      • OAuth2AuthenticationException๊ณผ ๊ด€๋ จ๋œ OAuth2Error ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

RequestMatcher

  • ํ† ํฐ ์š”์ฒญ ํŒจํ„ด

    • /oauth2/token, POST


์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ

img_21.png
  1. AuthenticationConverter ์ถ”๊ฐ€

  2. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” AuthenticationConverter ๋“ค์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

  3. AuthenticationProvider ์ถ”๊ฐ€

  4. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” AuthenticationProvider ๋“ค์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

  5. OAuth2AccessTokenAuthenticationToken ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OAuth2AccessTokenResponse๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ

  6. OAuth2AuthenticationException์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OAuth2Error ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ


ํด๋ผ์ด์–ธํŠธ ์ธ์ฆํ•˜๊ธฐ

OAuth2ClientAuthenticationConfigurer

  • OAuth2 ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์š”์ฒญ์— ๋Œ€ํ•œ ์ „์ฒ˜๋ฆฌ, ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ ๋ฐ ํ›„์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • OAuth2ClientAuthenticationFilter๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋ฅผ OAuth2 ์ธ์ฆ ์„œ๋ฒ„ SecurityFilterChain ๋นˆ์— ๋“ฑ๋กํ•œ๋‹ค.

  • ์ง€์›๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐฉ๋ฒ•์€ client_secret_basic, client_secret_post, private_key_jwt, client_secret_jwt, none(๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ)์ด๋‹ค.

OAuth2ClientAuthenticationFilter

  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    • DelegatingAuthenticationConverter

      • JwtClientAssertionAuthenticationConverter : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐฉ์‹์ด HTTP Basic์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ

      • ClientSecretBasicAuthenticationConverter : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐฉ์‹์ด POST์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ

      • ClientSecretPostAuthenticationConverter : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐฉ์‹์ด JWT์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ

      • PublicClientAuthenticationConverter : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐฉ์‹์ด PKCE์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ

    • AuthenticationProviders

      • JwtClientAssertionAuthenticationProvider

      • ClientSecretAuthenticationProvider

      • PublicClientAuthenticationProvider

      • ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์— ๋”ฐ๋ผ ํ† ํฐ์„ ๋ฐœํ–‰ํ•˜๋Š” AuthenticationProvider ๊ตฌํ˜„์ฒด๋“ค

    • AuthenticationSuccessHandler

      • ์ธ์ฆ๋œ OAuth2ClientAuthenticationToken์„ SecurityContext์— ์ €์žฅํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด

    • AuthenticationFailureHandler

      • OAuth2AuthenticationException์„ ์‚ฌ์šฉํ•˜์—ฌ OAuth2Error๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด

RequestMatcher

  • ํ† ํฐ ์š”์ฒญ ํŒจํ„ด

    • /oauth2/token POST

    • /oauth2/introspect POST

    • /oauth2/revoke POST

    • /oauth2/device_authorization POST

์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ

img_22.png
  1. AuthenticationConverter ์ถ”๊ฐ€

  2. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” AuthenticationConverter ๋“ค์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

  3. AuthenticationProvider ์ถ”๊ฐ€

  4. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” AuthenticationProvider ๋“ค์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

  5. OAuth2ClientAuthenticationToken ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ

  6. OAuth2AuthenticationException์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OAuth2Error ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ›„์ฒ˜๋ฆฌ๊ธฐ


ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ํ๋ฆ„

img_23.png
img_24.png
  • ํ•„ํ„ฐ ์ฒด์ธ์— ๋“ฑ๋ก๋œ ํ•„ํ„ฐ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ณด๋ฉด ํ† ํฐ๊ณผ ๊ด€๋ จ๋œ ํ•„ํ„ฐ๋“ค์€ ๋ชจ๋‘ AuthorizationFilter ๋’ค์— ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฆ‰ ํ† ํฐ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์ด ์šฐ์„ ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์€ OAuth2ClientAuthenticationFilter์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

1. ์ž„์‹œ ์ฝ”๋“œ๋กœ ํ† ํฐ ์š”์ฒญ

img_25.png
  • client_secret_post ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐฉ์‹

2. OAuth2ClientAuthenticationFilter -> ClientSecretPostAuthenticationConverter

img_26.png
  • ํ•„์š”ํ•œ ์ •๋ณด ์ถ”์ถœ ํ›„ OAuth2ClientAuthenticationToken ์ƒ์„ฑ

3. ProviderManager -> ClientSecretAuthenticationProvider

img_27.png
  • ClientSecretAuthenticationProvider๋Š” client_secret_basic ๋ฐฉ์‹๊ณผ client_secret_post ๋ฐฉ์‹์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ์ธ๊ฐ€ ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ณด๋“ค์„ ํ™•์ธํ•œ๋‹ค.

  • ์ดํ›„ ์ตœ์ข…์ ์œผ๋กœ ์ธ์ฆ๋œ OAuth2ClientAuthenticationToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

4. OAuth2ClientAuthenticationFilter -> onAuthenticationSuccess()

img_28.png
  • ์ธ์ฆ๊ฐ์ฒด ์ €์žฅ

5. AuthorizationFilter -> OAuth2TokenEndpointFilter

  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ๋งˆ์ณค์œผ๋ฏ€๋กœ OAuth2TokenEndpointFilter๋ฅผ ํ†ตํ•ด ์ตœ์ข… OAuth2AccessTokenResponse ๋ฐ˜ํ™˜

img_29.png

๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ํ๋ฆ„


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

๋ฉ”์ธ โซ

๋‹ค์Œ โ†ช๏ธ - Spring Authorization Server(์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ) - Token Introspection Endpoint

Last updated