AuthCode

OAuth 2.0 Token Endpoint

Authorization Code ํ๋ฆ„

img_30.png

Access Token Response

Successful Response

์ธ๊ฐ€ ์„œ๋ฒ„๋Š” ์•ก์„ธ์Šค ํ† ํฐ๊ณผ (์„ ํƒ์ ์œผ๋กœ) ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋ฉฐ, ๋‹ค์Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—”ํ‹ฐํ‹ฐ ๋ฐ”๋””์— ์ถ”๊ฐ€ํ•˜์—ฌ 200 OK ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ HTTP ์‘๋‹ต์œผ๋กœ ์‘๋‹ต์„ ๊ตฌ์„ฑํ•œ๋‹ค.

  • access_token, ํ•„์ˆ˜

    • ์ธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ ์•ก์„ธ์Šค ํ† ํฐ ๋ฌธ์ž์—ด

  • token_type, ํ•„์ˆ˜

    • ํ† ํฐ ์œ ํ˜•์€ ์ผ๋ฐ˜์ ์œผ๋กœ Bearer ๋ฌธ์ž์—ด

  • expires_in, ๊ถŒ์žฅ

    • ํ† ํฐ์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„

  • refresh_token, ์„ ํƒ ์‚ฌํ•ญ

    • ์•ก์„ธ์Šค ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” refresh_token์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•˜๋‹ค.

    • implicit ๊ถŒํ•œ ๋ถ€์—ฌ๋กœ ๋ฐœํ–‰๋œ ํ† ํฐ์€ refresh_token์„ ๋ฐœํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

  • scope, ์„ ํƒ ์‚ฌํ•ญ

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€์—ฌํ•œ ๋ฒ”์œ„๊ฐ€ ์•ฑ์ด ์š”์ฒญํ•œ ๋ฒ”์œ„์™€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์„ ํƒ์‚ฌํ•ญ

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€์—ฌํ•œ ๋ฒ”์œ„๊ฐ€ ์š”์ฒญ๋œ ๋ฒ”์œ„์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํ•„์š”ํ•˜๋‹ค.

img_31.png

Unsuccessful Response

  • error

    • invalid_request

      • ์š”์ฒญ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜, ์ง€์›๋˜์ง€ ์•Š๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Œ

    • invalid_client

      • ์š”์ฒญ์— ์ž˜๋ชป๋œ client_id ๋˜๋Š” client_secret ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์— ์‹คํŒจ(HTTP 401 ์‘๋‹ต)

    • invalid_grant

      • ์ธ์ฆ ์ฝ”๋“œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋งŒ๋ฃŒ๋จ

      • ๊ถŒํ•œ ๋ถ€์—ฌ์— ์ œ๊ณต๋œ redirect_uri์™€ ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ์— ์ œ๊ณต๋œ redirect_uri๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

    • invalid_scope

      • ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์š”์ฒญ์˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฒ”์œ„๋ฅผ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ

    • unauthorized_client

      • ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ๋œ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ์‚ฌ์šฉํ•  ๊ถŒํ•œ์ด ์—†์Œ

      • RegisteredCleitn์— ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์œผ๋กœ ์š”์ฒญํ•œ ๊ฒฝ์šฐ

    • unsupported_grant_type

      • ๊ถŒํ•œ ๋ถ€์—ฌ ์„œ๋ฒ„๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ์Šน์ธ ์œ ํ˜•์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ


์ฝ”๋“œ ํ๋ฆ„

1. ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ

img_32.png
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ๋งˆ์น˜๊ณ  AuthorizationFilter๋ฅผ ๊ฑฐ์ณ OAuth2TokenEndpointFilter๋กœ ์ด๋™

2. OAuth2TokenEndpointFilter -> OAuth2AuthorizationCodeAuthenticationConverter

img_33.png
  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ํ•„์ˆ˜๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์ด์šฉํ•ด OAuth2AuthorizationCodeAuthenticationToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

3. ProviderManager -> OAuth2AuthorizationCodeAuthenticationProvider

img_34.png
  • client_id, redirect_uri, ํ™œ์„ฑํ™” ์ƒํƒœ ๋“ฑ์„ ํ™•์ธํ•œ ๋’ค ์ดํ›„ ๋กœ์ง์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

img_35.png
  • ํ† ํฐ์„ ๋ฐœํ–‰ํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

img_36.png
  • ์•ก์„ธ์Šค ํ† ํฐ์„ ๋งŒ๋“ ๋‹ค.

  • DelegatingOAuth2TokenGenerator -> JwtGenerator

img_37.png
img_38.png
  • ์กฐ๊ฑด์— ๋”ฐ๋ผ refresh_token๊ณผ id_token์„ ์ƒ์„ฑํ•œ๋‹ค.

img_39.png
  • ์ž„์‹œ ์ฝ”๋“œ๋Š” ๋ฌดํšจํ™” ์ฒ˜๋ฆฌํ•˜๊ณ  ์ตœ์ข… OAuth2AccessTokenAuthenticationToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

4. OAuth2TokenEndpointFilter -> sendAccessTokenResponse()

img_40.png
img_41.png

Last updated