MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค Spring

[Spring Security] Authentication(์ธ์ฆ)

HYEJU01 2024. 11. 29. 20:10

 

์‹œํ๋ฆฌํ‹ฐ ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ

 

Filter ๊ธฐ๋ฐ˜ ๋™์ž‘ (ํ•„ํ„ฐ์ฒด์ธ)

๋ชจ๋“  ์š”์ฒญ์€ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

์ ‘๊ทผ ์ฃผ์ฒด(Principal) : ๋ณดํ˜ธ๋œ ๋Œ€์ƒ์— ์ ‘๊ทผํ•˜๋Š” ์ฃผ์ฒด(์œ ์ €) 

์ธ์ฆ(Authentication) : ์ฆ๋ช…, ์œ ์ €๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ, ํ†ต์ƒ ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. 

๊ถŒํ•œ(Role) : ๋กœ๊ทธ์ธ ๋œ ์‚ฌ๋žŒ + role (๊ถŒํ•œ) ์ด ์žˆ๋Š” ์‚ฌ๋žŒ

์ธ๊ฐ€(Authorization) : ํ—ˆ๋ฝ, ์œ ์ €์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ™•์ธ, ํ—ˆ๋ฝํ•˜๋Š” ๊ฒƒ

 

 

 

๋กœ๊ทธ์ธ ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ณผ์ •

 

 

1.  User ๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด + ์ธ์ฆ ์š”์ฒญ์„ ํ•œ๋‹ค (Http Request) 

2. ๋ชจ๋“  ์š”์ฒญ์€ `AuthenticationFilter` ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. (๋ชจ๋“  ์š”์ฒญ ๊ฐ€๋กœ์ฑ„๊ธฐ)

3.  `UsernamePasswordAuthenticationToken`(์‹œํ๋ฆฌํ‹ฐ์„ธ์…˜์ด ์“ฐ๋Š” ์ธ์ฆํ† ํฐ) ์ด ๊ฐ์ฒด `Authentication`๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

4.  ` AuthenticationManager` ๊ฐ€ ์š”์ฒญ์„ ์ ์ ˆํ•œ ` AuthenticationProvider` ๋กœ ์ „๋‹ฌ

5. ` AuthenticationProvider ` ์—์„œ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ! 

6. ` UserDetailsService` ๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ›๊ณ  DB์—์„œ ์ฐพ์€ ์ •๋ณด๋กœ `UserDetails` ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐ˜ํ™˜

7. `AuthenticationProvider` ๊ฐ€ `UserDetails` ๋ฅผ ๋ฐ›๊ณ  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋น„๊ตํ•œ ํ›„ ์ธ์ฆ ์ฒ˜๋ฆฌ ํ›„ ` Authentication` ๋ฐ˜ํ™˜

(` Authentication`  ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ธ์ฆ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์ธ ๊ฒƒ์ด๋‹ค)

8.` Authentication` ๋ฅผ `SecurityContext` ์— ์ €์žฅํ•œ๋‹ค  

 

 

Authentication ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค.

- ์ธ์ฆ authentication  ์ฃผ์š” ๋ฉ”์„œ๋“œ 
  • getPrincipal(): ์ธ์ฆ ์ฃผ์ฒด (์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ฐ์ฒด).
  • getCredentials(): ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด (์˜ˆ: ๋น„๋ฐ€๋ฒˆํ˜ธ).
  • getAuthorities(): ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ ๋ชฉ๋ก.
  • isAuthenticated(): ์ธ์ฆ ์—ฌ๋ถ€ ํ™•์ธ.

 

AuthenticationManager ์ธ์ฆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ.

 

AuthenticationProvider ์‹ค์ œ ์ธ์ฆ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค.

 

UserDetailsService ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค.

 

SecurityContextHolder ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅ ๋ฐ ์กฐํšŒ.
SecurityContextHolder : ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์ธ๋ฉ”๋ชจ๋ฆฌ ์„ธ์…˜ ์ €์žฅ์†Œ

 

SecurityContext  ์‹œํ๋ฆฌํ‹ฐ ์„ธ์…˜
ํ˜„์žฌ ์‚ฌ์šฉ์ž์™€ ๊ด€๋ จ๋œ ์ธ์ฆ ์ •๋ณด(Authentication)๋ฅผ ๋ณด๊ด€.

 

 

 

์‹œํ๋ฆฌํ‹ฐ ์„ธ์…˜ ๊ตฌ์กฐ

  • ์‹œํ๋ฆฌํ‹ฐ๋Š” ์ž์‹ ๋งŒ์˜ ํŠน๋ณ„ํ•œ ์„ธ์…˜๊ฐ์ฒด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. (Security Session๊ฐ์ฒด)
  • ์‹œํ๋ฆฌํ‹ฐ ์„ธ์…˜๊ฐ์ฒด์—๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒดํƒ€์ž…๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค (Authentication๊ฐ์ฒด)
  • Authentication๊ฐ์ฒด ์•ˆ์—๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒดํƒ€์ž…๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค (UserDetails๊ฐ์ฒด)

 

new ์‹œํ๋ฆฌํ‹ฐ์„ธ์…˜(new ์ธ์ฆ๊ฐ์ฒด(new ์œ ์ €๊ฐ์ฒด)))
new SecurityContextHolder( new Authentication( new UserDetails() ) )

 

 

 

 

 

 

 

 

ContextHolder ๋‚ด๋ถ€ ๊ตฌ์กฐ 

 

 

1) SecurityContextHolder : SecurityContextHolder๋Š” SecurityContext๋ฅผ ์ œ๊ณตํ•˜๋Š” static ๋ฉ”์†Œ๋“œ(getContext)๋ฅผ ์ง€์›ํ•œ๋‹ค. 

2) SecurityContext : SecurityContext ๋Š” ์ ‘๊ทผ ์ฃผ์ฒด์™€ ์ธ์ฆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Context ์ด๋‹ค. ์ฆ‰, Authentication ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์‹œํ๋ฆฌํ‹ฐ ์„ธ์…˜)

3) Authentication : Principal๊ณผ GrantAuthority๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์ด ์ด๋ฃจ์–ด ์ง€๋ฉด ํ•ด๋‹น Athentication์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค 

4) Principal : ์œ ์ €์— ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Principal๋กœ UserDetails๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค 

5) GrantAuthority  : ROLE_ADMIN, ROLE_USER ๋“ฑ Principal์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

 

 

 

๋กœ๊ทธ์ธ ๋™์ž‘ ๋ฐฉ์‹ 

 

> ๋กœ๊ทธ์ธ ์‹œ๋„ http request path : `/login` , http Method `POST`

> `AuthenticationFilter` - `DB` ๊นŒ์ง€ (์ด ๋ถ€๋ถ„์ด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ณผ์ •)

> DB ์— ์กด์žฌํ•˜๋ฉด `UserDetails()` ๊ฐ’์„ ๊บผ๋‚ด์„œ Session ์ƒ์„ฑ

> `SecurityContextHolder` ์— `Authentication (์ธ์ฆ๊ฐ์ฒด)` ์ €์žฅ

> user ์—๊ฒŒ `session ID (JSESSIONID) ` ์‘๋‹ต

> ์ดํ›„ ์š”์ฒญ ์ฟ ํ‚ค์—์„œ JSESSIONID ๋กœ ๊ฒ€์ฆ ํ›„ ์œ ํšจํ•˜๋ฉด Authentication(์ธ์ฆ๊ฐ์ฒด) ์„ ์š”์ฒญ์œผ๋กœ๋„ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ์Œ

 

 

 

 

 

 

์„ธ์…˜-์ฟ ํ‚ค ๋ฐฉ์‹ 

 

 

spring security๋Š” ์„ธ์…˜-์ฟ ํ‚ค ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆํ•จ

 

 

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํผ์„ ์ œ์ถœํ•˜๋ฉด, Spring Security๋Š” ์‚ฌ์šฉ์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ™•์ธํ•˜๊ณ , ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์„ธ์…˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ์…˜ ID๊ฐ€ ํฌํ•จ๋œ ์ฟ ํ‚ค(JSESSIONID)๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ƒ์„ฑ๋˜์–ด ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ›„์† ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค, ๋ธŒ๋ผ์šฐ์ €๋Š” JSESSIONID ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง„ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ์„ธ์…˜์ด ๋งŒ๋ฃŒ๋˜๋ฉด, ์„œ๋ฒ„ ์ธก์—์„œ ์„ธ์…˜์ด ์‚ญ์ œ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค๋„ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

์ถœ์ฒ˜ : 

https://velog.io/@mooh2jj/Security-%EC%9D%B8%EC%A6%9D%EC%9D%B8%EA%B0%80%EC%B2%98%EB%A6%AC