Authentication
์ธ์ฆ ์ ๋ณด๋ก ์ฌ์ฉ์์ ์ธ์ฆ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ํฐ๊ฐ์ ๊ฐ๋
์ธ์ฆ์ id/password๋ฅผ ๋ด๊ณ ์ธ์ฆ ๊ฒ์ฆ์ ์ํด ์ด๋ฅผ ์ ๋ฌ/์ฌ์ฉํ๋ค.
์ธ์ฆ ํ์๋ ์ต์ข ๊ฒฐ๊ณผ(์ธ์ฆ ์ฃผ์ฒด/๊ฐ์ฒด/๋น๋ฐ๋ฒํธ/๊ถํ์ ๋ณด ๋ฑ)๋ฅผ ๋ด๊ณ SecurityContext์ ์ ์ฅ๋์ด ์ ์ญ์ผ๋ก ์ฐธ์กฐ ๊ฐ๋ฅํ๋ค.
๊ตฌ์กฐ
principal : ์ธ์ฆ ์ฃผ์ฒด(id๋ User๊ฐ์ฒด์ ๊ฐ์ด ์ฌ์ฉ์๋ฅผ ์๋ณ)
credentials : ๋น๋ฐ๋ฒํธ
authorities : ๊ถํ, ์ญํ
details : ๋ถ๊ฐ ์ ๋ณด
Authenticated : ์ธ์ฆ ์ฌ๋ถ(T/F)
๊ณผ์
Id/Pw๋ฅผ ์๋ฒ์ ์ ๋ฌ
UsernamePasswordAuthenticationFilter์์ ์ด๋ฅผ ํํฐ๋ง
์์ฒญํ Id/PW๋ฅผ ๋ด์ Authentication ๊ฐ์ฒด ์์ฑ
AuthenticationManager์๊ฒ ์ด ์ธ์ฆ ๊ฐ์ฒด ์ ๋ฌ(์์ )
Manager๋ ์ ํฉํ ์ธ์ฆ๊ฐ์ฒด Provider์๊ฒ ์ธ์ฆ๊ฐ์ฒด ์ ๋ฌ
Provider๋ ์์ฒญ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ธ์ฆ๊ณผ์ ์ํ
์ธ์ฆ์ด ์ฑ๊ณตํ๋ค๋ฉด ๊ถํ๊ณผ ์ธ์ฆ ์ฌ๋ถ๋ฅผ ์ ํ ํ ์ธ์ฆ๊ฐ์ฒด๋ฅผ SecurityContext์ ์ ์ฅ
UsernamePasswordAuthenticationFilter
์ฌ์ฉ์ ์ธ์ฆ ์์ฒญ์ Authentication
์ธํฐํ์ด์ค๋ก ์ถ์ํํ๊ณ , AuthenticationManager
๋ฅผ ํธ์ถํ๋ค.
Authentication
์ค์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ ์ธํฐํ์ด์ค
Principal : ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถ(์ผ์ข ์ id) -> ์ ๊ทผ ์ฃผ์ฒด
Credentials : ์ ๊ทผ ์ฃผ์ฒด์ ๋น๋ฐ๋ฒํธ
Authorities : ์ฌ์ฉ์์ ROLE
getPricipal()(์ธ์ฆ ์์ด๋)
, getCredentials()(์ธ์ฆ ๋น๋ฐ๋ฒํธ)
, getAuthorities()(์ฌ์ฉ์ ๊ถํ๋ชฉ๋ก)
, getDetails()(๋ถ๊ฐ์ ๋ณด)
, isAuthenticated()(์ธ์ฆ์ฌ๋ถ)
์ ๊ฐ์ ๋ฉ์๋ ์ ๊ณต
AuthenticaitonManager
์ฌ์ฉ์ ์์ด๋/๋น๋ฐ๋ฒํธ๋ฅผ ์ธ์ฆํ๊ธฐ ์ํด ์ ์ ํ AuthenticationProvider
์ฐพ์ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ค. ๊ตฌํ๊ฐ์ฒด๋ก ProviderManager๋ฅผ ์ ๊ณตํ๋ค.
(๊ธฐ๋ณธ ProviderMansger์์ Form์ธ์ฆ(DaoAuthenticationProvider
)์ , RememberMe์ธ์ฆ(RememberMeAuthenticationProvider
)์ ์ ๊ณต )
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Provider๊ฐ ์๋ JWT, OAuth์ ๊ฐ์ ๋ณ๋์ ์ธ์ฆ์ ์ถ๊ฐ ํ๊ณ ์ ํ๋ฉด ๋ถ๋ชจProviderManager๋ฅผ ํ์ํด์ ์ฒ๋ฆฌํ ์ ์๋ provider๋ฅผ ์ฐพ๋๋ค.
spring ๋ณด์ ์ธ์ฆ ํ๋ก์ธ์ค์ ํต์ฌ์ผ๋ก ๋ฐฉ๋ฒ์ ์ ์ํ๋ api
์ปค์คํ provider๋ฅผ ๋ง๋ค์๋ค๋ฉด ๋ฑ๋กํด์ฃผ์ด์ผ ํ๋ค
AuthenticationProvider
์ค์ง์ ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ์ ์ฒ๋ฆฌํ๊ณ , ์ธ์ฆ ๊ฒฐ๊ณผ๋ฅผ Authentication ์ธํฐํ์ด์ค๋ก ๋ฐํํ๋ค.
์ปค์คํ provider๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค๋ฉด ์ด๋ฅผ implementsํ์ฌ ๊ตฌํ
authenticate()
์์ ์ค์ ์ธ์ฆ์ ์ฒ๋ฆฌํ๊ณ supports()
๋ AuthenticationManager์์ ์์ฒญ์ธ์ฆ๊ฐ์ฒด์ ์ ํฉํจ Provider๋ฅผ ์ฐพ๊ธฐ ์ํ ๋ฉ์๋์ด๋ค.
UserDetails
์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ด๋ ์ธํฐํ์ด์ค๋ก VO์ญํ
getAuthorities() : ๊ณ์ ์ด ๊ฐ๊ณ ์๋ ๊ถํ ๋ชฉ๋ก์ ๋ฆฌํด
getPassword() : ๊ณ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฆฌํด
getUsername() : ๊ณ์ ์ ์ด๋ฆ์ ๋ฆฌํด
isAccountNonExpired() : ๊ณ์ ์ด ๋ง๋ฃ๋์ง ์์๋ ์ง ๋ฆฌํด (true: ๋ง๋ฃ์๋จ)
isAccountNonLocked() : ๊ณ์ ์ด ์ ๊ฒจ์์ง ์์๋ ์ง ๋ฆฌํด (true: ์ ๊ธฐ์ง ์์)
isCredentialNonExpired() : ๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋ฃ๋์ง ์์๋ ์ง ๋ฆฌํด (true: ๋ง๋ฃ์๋จ)
isEnabled() : ๊ณ์ ์ด ํ์ฑํ(์ฌ์ฉ๊ฐ๋ฅ)์ธ ์ง ๋ฆฌํด (true: ํ์ฑํ)
UserDetailsService : DAO๋ก ์ฌ์ฉ๋๋ฉฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ก๋ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ก
UserDetails
๋ฅผ ๋ฐํํ๋ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์๋ค.
Last updated