์šฉ์–ด

๐Ÿ’ผ ์ธ์ฆ(Authentication)

์Šค์Šค๋กœ๋ฅผ ์ฆ๋ช…ํ•˜๋‹ค๋ผ๋Š” ๋œป์œผ๋กœ ํ”ํžˆ ๋งํ•˜๋Š” ๋กœ๊ทธ์ธ ๊ฐœ๋…์ด๋‹ค.
์ธ์ฆ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ์•Œ๊ณ  ์žˆ๋Š” ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ์ด์— ์†ํ•œ๋‹ค.

๐Ÿ™†๐Ÿปโ€โ™€๏ธ ์ธ๊ฐ€(Authorization)

ํ—ˆ๊ฐ€๋‚˜ ๊ถŒํ•œ์ด๋ผ๋Š” ๊ฐœ๋…๊ณผ ๊ฐ™๋‹ค. ์ธ์ฆ์ด ๋œ ์‚ฌ์šฉ์ž๋ผ๊ณ  ํ•ด๋„ ์ด์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ”’ ์ ‘๊ทผ ์ฃผ์ฒด(Principal)

๋ณดํ˜ธ๋ฐ›๋Š” ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋Œ€์ƒ

๐Ÿ… ๊ถŒํ•œ

์ธ์ฆ๋œ ์ฃผ์ฒด๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๋ฝ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒฐ์ •

  • ์ธ์ฆ ๊ณผ์ •์„ ํ†ตํ•ด ์ฃผ์ฒด๊ฐ€ ์ฆ๋ช…๋œ ํ›„ ๊ถŒํ•œ ๋ถ€์—ฌ ๊ฐ€๋Šฅ
  • ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋‘ ๊ฐ€์ง€ ์˜์—ญ์ด ์กด์žฌํ•˜๋Š”๋ฐ ์›น ์š”์ฒญ ๊ถŒํ•œ๊ณผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ ๋„๋ฉ”์ธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ถŒํ•œ ๋ถ€์—ฌ ์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

Spring Security ๋™์ž‘ ๋ฐฉ์‹

  1. ์š”์ฒญ ์ˆ˜์‹ 
  • ์‚ฌ์šฉ์ž๊ฐ€ form์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด Request๋ฅผ ๋ณด๋‚ธ๋‹ค.
  1. ํ† ํฐ ์ƒ์„ฑ
  • AuthenticationFilter๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•„์„œ UsernamePasswordAuthenticationTokenํ† ํฐ(์ธ์ฆ์šฉ ๊ฐ์ฒด)์„ ์ƒ์„ฑ
  • UsernamePasswordAuthenticationToken์€ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Provider์„ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉ
  1. AuthenticationFilter๋กœ ๋ถ€ํ„ฐ ์ธ์ฆ์šฉ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.
  • Authentication Manager์—๊ฒŒ ์ฒ˜๋ฆฌ ์œ„์ž„
  • Authentication Manager๋Š” Listํ˜•ํƒœ๋กœ Provider๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  1. Token์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Authentication Provider ์„ ํƒ
  • ์‹ค์ œ ์ธ์ฆ์„ ํ•  AuthenticationProvider์—๊ฒŒ ์ธ์ฆ์šฉ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ „๋‹ฌํ•œ๋‹ค.
  1. ์ธ์ฆ ์ ˆ์ฐจ
  • ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด AuthenticationProvider ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  DB์— ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ์ •๋ณด์™€ ํ™”๋ฉด์—์„œ ์ž…๋ ฅํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๋น„๊ต
  1. UserDetailsService์˜ loadUserByUsername๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰
  • AuthenticationProvider ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” authenticate() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด - ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ ์ธ์ฆ์šฉ ๊ฐ์ฒด๋กœ ํ™”๋ฉด์—์„œ ์ž…๋ ฅํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  1. AuthenticationProvider ์ธํ„ฐํŽ˜์ด์Šค์—์„œ DB์— ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, UserDetailsService ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  2. UserDetailsService ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ™”๋ฉด์—์„œ ์ž…๋ ฅํ•œ ์‚ฌ์šฉ์ž์˜ username์œผ๋กœ loadUserByUsername() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ DB์— ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ UserDetails ํ˜•์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค. ์ด๋ ‡๊ฒŒ DB์—์„œ ๊ฐ€์ ธ์˜จ ์ด์šฉ์ž์˜ ์ •๋ณด์™€ ํ™”๋ฉด์—์„œ ์ž…๋ ฅํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ๋˜๊ณ , ์ผ์น˜ํ•˜๋ฉด Authentication ์ฐธ์กฐ๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ์ผ์น˜ ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.

  3. ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ง„ Authentication ๊ฐ์ฒด๋ฅผ SecurityContextHolder์— ๋‹ด์€ ์ดํ›„ AuthenticationSuccessHandle๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(์‹คํŒจ์‹œ AuthenticationFailureHandler๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.)

Filter

๐ŸŽ (UsernamePassword)AuthenticationFilter

์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” form ๊ธฐ๋ฐ˜ ์ธ์ฆ
์„ค์ •๋œ ๋กœ๊ทธ์ธ URL๋กœ ์˜ค๋Š” ์š”์ฒญ์„ ๊ฐ์‹œํ•˜๋ฉฐ, ์œ ์ € ์ธ์ฆ ์ฒ˜๋ฆฌ์ธ AuthenticationManager๋ฅผ ํ†ตํ•œ ์ธ์ฆ ์‹คํ–‰
์ธ์ฆ์ด ์„ฑ๊ณตํ•œ๋‹ค๋ฉด ์ธ์ฆ์šฉ ๊ฐ์ฒด๋ฅผ SecurityContext์— ์ €์žฅ ํ›„ AuthenticationSuccessHandler ์‹คํ–‰, ์‹คํŒจ์‹œ์—๋Š” AuthenticationFailureHandler ์‹คํ–‰

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป AuthenticationProvider

ํ™”๋ฉด์—์„œ ์ž…๋ ฅํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด์™€ DB์ •๋ณด๋ฅผ ๋น„๊ต
Spring Security์˜ AuthenticationProvider์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ security-context์— provider๋กœ ๋“ฑ๋ก ํ›„ ์ธ์ฆ์ ˆ์ฐจ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
login view์—์„œ login-processing-url๋กœ์˜ form action ์ง„ํ–‰ ์‹œ ํ•ด๋‹น ํด๋ž˜์Šค์˜ supports() > authenticate() ์ˆœ์œผ๋กœ ์ธ์ฆ ์ ˆ์ฐจ ์ง„ํ–‰

๐Ÿชด UserDetailsService

UserDetailsService ์ธํ„ฐํŽ˜์ด์Šค๋Š” DB์—์„œ ์œ ์ € ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• 

๐Ÿ‘‘ UserDetails

์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค, ์ง์ ‘ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.

reference

https://velog.io/@kyungwoon/Spring-Security-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

0๊ฐœ์˜ ๋Œ“๊ธ€