OAuth2AuthorizedClient

oauth2Client() - OAuth2AuthorizedClient

  • OAuth2AuthorizedClient๋Š” ์ธ๊ฐ€๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์˜๋ฏธํ•˜๋Š” ํด๋ž˜์Šค๋‹ค.

  • ์ตœ์ข… ์‚ฌ์šฉ์ž(๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž)๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ๊ฐ€๋œ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

  • OAuth2AuthorizedClient๋Š” AccessToken๊ณผ RefreshToken์„ ClientRegistration(ํด๋ผ์ด์–ธํŠธ)๊ณผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ ์ตœ์ข… ์‚ฌ์šฉ์ž์ธ Principal๊ณผ ํ•จ๊ป˜ ๋ฌถ์–ด์ค€๋‹ค.

  • OAuth2AuthorizedClient์˜ AccessToken์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์˜ ์ž์›์„ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ๊ฐ€ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์œผ๋กœ ํ† ํฐ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

  • OAuth2AuthorizedClient์˜ ClientRegistration๊ณผ AccessToken์„ ์‚ฌ์šฉํ•ด์„œ UserInfo ์—”๋“œ ํฌ์ธํŠธ๋กœ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

img_5.png

OAuth2AuthorizedClientRepository

  • OAuth2AuthorizedClientRepository๋Š” ๋‹ค๋ฅธ ์›น ์š”์ฒญ์ด ์™€๋„ ๋™์ผํ•œ OAuth2AuthorizedClient๋ฅผ ์œ ์ง€ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

  • OAuth2AuthorizedClientService์—๊ฒŒ OAuth2AuthorizedClient์˜ ์ €์žฅ, ์กฐํšŒ, ์‚ญ์ œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•œ๋‹ค.

img_6.png

OAuth2AuthorizedClientService

  • OAuth2AuthorizedClientService์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ OAuth2AuthorizedClient๋ฅผ ๊ด€๋ฆฌ(์ €์žฅ, ์กฐํšŒ, ์‚ญ์ œ)๋ฅผ ํ•œ๋‹ค.

img_7.png

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ™œ์šฉ

  • OAuth2 Client ์ž๋™ ์„ค์ • ์ดˆ๊ธฐํ™”arrow-up-right ๊ณผ์ •์—์„œ OAuth2AuthorizedClientRepository๊ณผ OAuth2AuthorizedClientService๊ฐ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

  • OAuth2AuthorizedClientRepository๋‚˜ OAuth2AuthorizedClientService๋ฅผ ํ†ตํ•ด OAuth2AuthorizedClient๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  • OAuth2AuthorizedClient์—์„œ OAuth2AccessToken์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋ณดํ˜ธ ์ค‘์ธ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ์‹œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

img_4.png


OAuth2AuthorizationCodeGrantFilter

  • Authorization Code Grant ๋ฐฉ์‹์œผ๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ์ง€์›ํ•˜๋Š” ํ•„ํ„ฐ

  • ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋˜๋ฉด์„œ ์ „๋‹ฌ๋œ code๋ฅผ ์ธ๊ฐ€ ์„œ๋ฒ„์˜ Access Token์œผ๋กœ ๊ตํ™˜ํ•œ๋‹ค.

  • OAuth2AuthorizedClientRepository๋ฅผ ์‚ฌ์šฉํ•ด์„œ OAuth2AuthorizedClient๋ฅผ ์ €์žฅ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ Redirect Uri๋กœ ์ด๋™ํ•œ๋‹ค.

์‹คํ–‰ ์กฐ๊ฑด

  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์— code์™€ state ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ

  • OAuth2AuthorizationRequest ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ

img_8.png

์˜ˆ์ œ ์ฝ”๋“œ

Controller

HTML

yml

๊ณผ์ • ๋””๋ฒ„๊น…

1. OAuth2AuthorizationRequestRedirectFilter

  • ์‚ฌ์šฉ์ž ์Šน์ธ์„ ํ•  ์ˆ˜ ์žˆ๋Š” url๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•œ๋‹ค.

img_9.png

2. OAuth2AuthorizationCodeGrantFilter

  • ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋˜์–ด ์ด ํ•„ํ„ฐ๋กœ ์™”๋‹ค.

  • ํŠน์ • ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋ฉด ํŠน์ • ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‹ค์Œ ํ•„ํ„ฐ๋กœ ๊ฐ€์ง€ ์•Š๊ณ , ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ํ•„ํ„ฐ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

img_10.png
  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์— code์™€ state๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋ณด๊ณ , OAuth2AuthorizationRequest๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

img_11.png
img_12.png
  • redirect_uri๋ฅผ ๋น„๊ตํ•œ๋‹ค.

img_13.png
  • ๋ชจ๋“  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  • ๋จผ์ € AuthenticationManager(ProviderManager)์—๊ฒŒ ์ธ์ฆ ์š”์ฒญ์„ ์œ„์ž„ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” AuthenticationProvider๋Š” OAuth2AuthorizationCodeAuthenticationProvider๋กœ ์—ฌ๊ธฐ์„œ ์ธ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ Access Token ๊ตํ™˜์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

img_14.png
  • ๊ทธ๋ฆฌ๊ณ  OAuth2AuthorizedClient๋ฅผ ์ €์žฅํ•˜๊ณ , redirectUrl๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ redirectUrl์€ application.yml ํŒŒ์ผ์—์„œ ์„ค์ •ํ•œ ๊ฒฝ๋กœ์ด๋‹ค.

img_15.png

3. controller

  • ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์Šคํ”„๋ง MVC๋กœ ๋„˜์–ด์˜จ๋‹ค.

  • ์—ฌ๊ธฐ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋˜์–ด ์š”์ฒญ์ด ์™”๋‹ค๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ธ๊ฐ€๋ฅผ ๋ฐ›์€ ์ƒํƒœ์—์„œ ์˜จ ๊ฒƒ์ด๋‹ค.

  • ํ•˜์ง€๋งŒ ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— SecurityContextHolder ์—์„œ ๊บผ๋‚ธ Authentication์€ ์•„์ง "Anonymous" ์ด๋‹ค.

  • ๊ทธ๋ž˜์„œ DefaultOAuth2UserService์—๊ฒŒ UserInfo ์—”๋“œํฌ์ธํŠธ ์š”์ฒญ์„ ๋ณด๋‚ด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์–ป๊ณ  SecurityContextHolder์— ์ €์žฅํ•ด ์ฃผ์—ˆ๋‹ค.

  • ์ฐธ๊ณ ๋กœ ๊ธฐ๋ณธ์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” OAuth2AuthorizedClientRepository ๊ตฌํ˜„์ฒด๋Š” ์ต๋ช… ์‚ฌ์šฉ์ž์ด๋”๋ผ๋„ principalName์„ anonymousUser๋กœ ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ OAuth2AuthorizedClientService ๊ตฌํ˜„์ฒด๋Š” ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— null์ด๋‹ค.

img_16.png
img_17.png

์ด์ „ โ†ฉ๏ธ - OAuth 2.0 Client(oauth2Client) - OAuth2ClientConfigurer ์ดˆ๊ธฐํ™”arrow-up-right

๋ฉ”์ธ โซarrow-up-right

๋‹ค์Œ โ†ช๏ธ - OAuth 2.0 Client(oauth2Client) - DefaultOAuth2AuthorizedClientManagerarrow-up-right

Last updated