๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/WEB-Spring,SpringBoot

์Œฉ๊ตฌํ˜„ํ–ˆ๋˜ ๊ตฌ๊ธ€ OAuth ์ธ์ฆ ํ”„๋กœ์ ํŠธ์— Spring Security ์ ์šฉํ•˜๊ธฐ

by syLim___ 2024. 11. 18.
728x90

 

์–ด์ œ ํ•˜๋ฃจ๋™์•ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์›€ ์—†์ด, ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋Š” ๊ณผ์ •์„ ์Œฉ์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ

๊ตฌ๊ธ€ OAuth ๊ฐ„ํŽธ ํšŒ์›๊ฐ€์ž…์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜์—ˆ๋‹ค.

๐Ÿ“„ Spring Security, OAuth2 Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์“ฐ์ง€ ์•Š๊ณ  ๊ตฌ๊ธ€ OAuth ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ํ•˜๊ธฐ

 

์ด๋ฒˆ์—๋Š” Spring Security์™€ OAuth2 Client ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.

 

์ด ๊ณผ์ •์—์„œ ์ƒ๊ฐ๋ณด๋‹ค ๊ณ ์ƒํ–ˆ๋‹ค.

์ด์œ ๋Š” Spring Security ๋ฒ„์ „์ด ๋ฌด๋ ค 6.2.7์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 6 ๋ฒ„์ „ ์ด์ƒ์€ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ•์˜๋‚˜ ๊ต์žฌ๊ฐ€ ๊ฑฐ์˜ ์—†์—ˆ๊ณ ,

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋’ค์ ธ๋ด๋„ ์ž˜ ๋ชป์ฐพ๊ฒ ์–ด์„œ ๊ณ ์ƒํ•ด๊ฐ€๋ฉด์„œ ๊ฒจ์šฐ๊ฒจ์šฐ ์„ค์ •ํ–ˆ๋‹ค.

 

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€, ์Šคํ”„๋ง ํ•„ํ„ฐ ์ฒด์ธ์— ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 5.7.x ๋ฒ„์ „์—์„œ๋Š” SecurityConfig ํŒŒ์ผ์ด WebSecurityConfigurerAdapter๋ฅผ ์ƒ์†๋ฐ›๊ณ ,

configure() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์ด๊ณณ์—์„œ ์ธ์ฆ, ์ธ๊ฐ€์— ๋Œ€ํ•œ ์„ค์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 6.2.x ๋ฒ„์ „์—์„œ๋Š” WebSecurityConfigurerAdapter ํด๋ž˜์Šค๊ฐ€ ์‚ฌ๋ผ์กŒ๊ณ  (deprecated๋œ ๊ฒƒ๋„ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ๋น ์กŒ๋‹ค!!)

์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์„ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค. ์ด ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์—์„œ ์ธ์ฆ, ์ธ๊ฐ€์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

 

์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ ์›๊ฒฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค.

 

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ๋„์ž…ํ•˜๋ฉด์„œ ๋‹ฌ๋ผ์ง„ ๋˜ ํ•˜๋‚˜๋Š”, ํ”„๋ก ํŠธ ์„œ๋ฒ„์˜ OAuth ์ธ์ฆ ์š”์ฒญ ๋ถ€๋ถ„์ด๋‹ค.

๊ธฐ์กด ๋ฐฉ์‹์—์„œ๋Š”, ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„์—์„œ OAuth ์ธ์ฆ ํŽ˜์ด์ง€๋กœ ์ง์ ‘ ์š”์ฒญ์„ ๋ณด๋ƒˆ์—ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์‹œํ๋ฆฌํ‹ฐ ๋„์ž… ํ›„, OAuth ์ธ์ฆ ํŽ˜์ด์ง€๋กœ์˜ ์š”์ฒญ์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ `/oauth2/authorization/google` url๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

๋”ฐ๋ผ์„œ ํ”„๋ก ํŠธ ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์—”๋“œํฌ์ธํŠธ๋กœ GET์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

    - ์™œ๋ƒํ•˜๋ฉด ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ OAuth ์ธ์ฆ์˜ ๋ชจ๋“  ํ๋ฆ„(OAuth ์ธ์ฆ ํŽ˜์ด์ง€๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ๊นŒ์ง€ ๋ชจ๋‘!)์„ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    - ํ”„๋ก ํŠธ ์„œ๋ฒ„์—์„œ ์ง์ ‘ OAuth ์„œ๋ฒ„๋กœ ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋”๋‹ˆ, authorization_request_not_found ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค.

    - ์ด์œ ๋Š” ํ”„๋ก ํŠธ ์„œ๋ฒ„์—์„œ ์ง์ ‘ OAuth ์„œ๋ฒ„๋กœ ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ, ํ”„๋ก ํŠธ ์„œ๋ฒ„์—์„œ ์„ค์ •ํ•œ state ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’๊ณผ, Spring Security์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑํ•œ state๊ฐ’์˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ๊ธฐ์–ต๋‚˜๋Š” ๊ฑด ์ด์ •๋„์ด๊ณ ,

์ „์ฒด ํ๋ฆ„์„ ์ž˜ ์ •๋ฆฌํ•ด๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊ณ ๋„ํ™”์‹œ์ผœ๋ด์•ผ๊ฒ ๋‹ค.

728x90