์ํ๋ฆฌํฐ ๊ธฐ๋ณธ ํค์๋
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 ์ฃผ์ ๋ฉ์๋
|
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