์ธ์ฆ, ์ธ๊ฐ, ์ฟ ํค, ์ธ์ , OAuth2
์ธ์ฆ, ์ธ๊ฐ, ์ฟ ํค, ์ธ์ , OAuth2
์คํ๋ฅดํ ์ฝ๋ฉ ํด๋ฝ์ Spring ์ฌํ๋ฐ 2์ฃผ ์ฐจ ๋ด์ฉ์ธ ์ธ์ฆ, ์ธ๊ฐ, ์ฟ ํค, ์ธ์
, OAuth2
์ ์ ๋ฆฌํ๋ค.
ํต์ฌ ๋ด์ฉ
- ์น์์์ ์ธ์ฆ & ์ธ๊ฐ, ์ฟ ํค & ์ธ์
- Spring Security๋ฅผ ์ด์ฉํ ์ธ์ฆ ๋ฐ ์ธ๊ฐ
- OAuth2๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ
์ธ์ฆ vs ์ธ๊ฐ
์ธ์ฆ (Authentication)
์ฌ์ฉ์์ ์ ์์ ํ์ธํ๋ ํ์
๋ก๊ทธ์ธ์ ํตํด(์ฃผ๋ก ์์ด๋์ ํจ์ค์๋๋ก) ๋ณธ์ธ์์ ํ์ธํ๋ ๊ฒ
์ธ๊ฐ (Authorization)
์ฌ์ฉ์์ ๊ถํ์ ํ์ธํ๋ ํ์
์ญํ (Admin, User ...)์ ๋ฐ๋ฅธ ์ฌ์ฉ ๊ถํ ๊ด๋ฆฌ
์ฟ ํค์ ์ธ์
HTTP๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์์(Stateless
)
์ฟ ํค์ ์ธ์
์ ๋ชจ๋ HTTP์ ์ํ ์ ๋ณด๋ฅผ ์ ์ง(Stateful
) ํ๊ธฐ ์ํด ์ฌ์ฉ๋จ.
์ฟ ํค
- ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ์์ ์ ๋ณด๋ฅผ ๋ด์ ํ์ผ
- Application - Storage - Cookies์ ๋๋ฉ์ธ ๋ณ๋ก ์ ์ฅ๋จ
- Name(์ด๋ฆ), Value(๊ฐ), Domain(์ ์ฅ๋ ๋๋ฉ์ธ), Path(์ฌ์ฉ๋๋ ๊ฒฝ๋ก), Expire(๋ง๋ฃ ๊ธฐํ)๋ก ๊ตฌ์ฑ
์ธ์
- ์๋ฒ์ ์ ์ฅ๋๋ฉฐ ์ผ์ ์๊ฐ ๋์ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉ
์ธ์ ID
(์๋ฒ์์ ์ ์ฅํ๋ ํด๋ผ์ด์ธํธ ๋ณ๋ก ์ ์ผ๋ฌด์ด)๋ฅผ ๋ถ์ฌํ ํ ํด๋ผ์ด์ธํธ ๋ณ ํ์ํ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅ- ์๋ฒ์์ ์์ฑํ '์ธ์
ID'(์๋ต ํค๋๋ก ์ ๋ฌ๋จ)๋
์ธ์ ์ฟ ํค
(ํด๋ผ์ด์ธํธ๊ฐ ์ ์ฅ)๋ก ์ ์ฅ๋์ด ํด๋ผ์ด์ธํธ ์๋ณ์ ์ฌ์ฉ๋จ
Spring Security๋ฅผ ํตํ ์ธ์ฆ, ์ธ๊ฐ
์คํ๋ง ์ํ๋ฆฌํฐ
ํด๋ผ์ด์ธํธ - ์ปจํธ๋กค๋ฌ
๊ธฐ์กด์ ํด๋ผ์ด์ธํธ - ์ปจํธ๋กค๋ฌ ์ฌ์ด์์ request, response๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ์ธ์ฆ ์ธ๊ฐ๊ฐ ํ์ํ ๋, ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ๋ด๋นํด ์ค๋ค.
ํด๋ผ์ด์ธํธ - ์คํ๋ง ์ํ๋ฆฌํฐ - ์ปจํธ๋กค๋ฌ
์ธ์ฆ/์ธ๊ฐ๊ฐ ์ฑ๊ณตํ๋ฉด ์ปจํธ๋กค๋ฌ์๊ฒ UserDetails
๊ฐ์ฒด๋ฅผ ๋ณด๋ด์ฃผ์ง๋ง, ์ธ์ฆ/์ธ๊ฐ๊ฐ ์คํจํ๋ฉด ํด๋ผ์ด์ธํธ์๊ฒ ์คํจ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฌํ๋ค.
๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๊ณผ์
Authentication Manager (username์ผ๋ก ๋ฑ๋ก๋ ํ์ ID)-> UserDetailsService <-> DB(ํ์ ID๋ก ํด๋น Account๊ฐ ์กด์ฌํ๋์ง ํ์ธ)
WebSecurityConfig
์ ์ค์ ํ ๋ก๊ทธ์ธ ์ฃผ์๋ก Id์ Password๋ฅผ post ์์ฒญ์ผ๋ก ๋ณด๋ด๋ฉด Authentication Manager๊ฐ Id๋ฅผ UserDetailsService
๋ก ๋ณด๋ด๊ฒ ๋๊ณ , ์ด๋ฅผ ํตํด DB์์ ํด๋น ํ์์ ๋ณด๊ฐ ์๋์ง ์กฐํํ๋ค.
UserDetailsService -> UserDetails -> Authentication Manager
ํ์์ ๋ณด๊ฐ ์กด์ฌํ๋ค๋ฉด, ์กฐํ๋ Account ๊ฐ์ฒด๋ฅผ ์ด์ฉํด UserDetailsService์์ UserDetails ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ด์ฉํด Authentication Manager์์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ Id, Password ๊ฐ๊ณผ ์ผ์นํ๋์ง ํ์ธํ๊ณ ์ธ์ฆ์ ์๋ํ๋ค.
์ธ์ฆ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ค์ง๋ค๋ฉด ์์ฒญ์ ๋ํ ๊ถํ์ UserDetails๊ฐ ๊ฐ๊ณ ์๋์ง ํ์ธํ๋ ์ธ๊ฐ๋ฅผ ์๋ํ๋ค.
OAuth2๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ
OAuth2 ๋ก๊ทธ์ธ์ ํ๋ฆ
- ์ธ์ฆ ์ฝ๋ ์์ฒญ <-> ์ธ์ฆ ์ฝ๋ ์ ๋ฌ
- ์ธ์ฆ ์ฝ๋๋ก ํ ํฐ ์์ฒญ <-> ํ ํฐ ์ ๋ฌ
- ํ ํฐ์ผ๋ก API ํธ์ถ <-> ํ ํฐ ์ ํจ์ฑ ํ์ธ ํ ์๋ต ์ ๋ฌ
OAuth2๋ ์์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํ๋๋ค.
OAuth2 ๋ก๊ทธ์ธ ๊ตฌํ ์์
- OAuth2๋ฅผ ์ ๊ณตํด ์ฃผ๋ ํํ์ด์ง์์ REST API ํค๋ฅผ ๋ฐ์ ๋ค ํด๋น REST API ํค๋ฅผ ๋ฃ์ด ๋ก๊ทธ์ธ ์์ฒญ URI๋ฅผ ํตํด ๋ก๊ทธ์ธ ์์ฒญ ํ์ด์ง๋ฅผ ๋ง๋ ๋ค.(ํ๋ก ํธ๋จ์์)
- ํด๋ผ์ด์ธํธ๊ฐ OAuth2 ๋ก๊ทธ์ธ์ ๋์ํ๋ฉด ๋ฑ๋กํด๋ ์ฝ๋ฐฑ URI๋ก ์ธ๊ฐ ํ ํฐ์ด ์ ๋ฌ๋๋ค.
- ์ปจํธ๋กค๋ฌ์์ ํด๋น ํ ํฐ์ ๋ฐ์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๋ค.
- ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ง๋ค.
- ์ธ๊ฐ ์ฝ๋๋ก ์ก์ธ์ค ํ ํฐ์ ๋ฐ๋ ์ฒ๋ฆฌ
- ์ก์ธ์ค ํ ํฐ์ผ๋ก OAuth2 ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐ๋ ์ฒ๋ฆฌ
- ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐ์์ผ๋ฉด DB์์ ์กฐํํ์ฌ ํด๋น ๊ณ์ ์ด ์์ผ๋ฉด ๋ฐ๋ก ๋ก๊ทธ์ธ ์ฒ๋ฆฌ(UsernamePasswordAuthenticationToken์ ์ด์ฉํ์ฌ), ์์ผ๋ฉด DB์ Account๋ฅผ ์ ์ฅ ํ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.