[Mastering Spring 5.0] 6.5 Spring Security - Basic authentication
Mastering Spring 5.0 ์คํฐ๋
์คํ๋ง ์ํ๋ฆฌํฐ๋ก REST ์๋น์ค ๋ณดํธ
์ต๊ทผ์๋ ์๋น์ค ์์คํ ๋ค๋ผ๋ฆฌ REST API ๊ธฐ๋ฐ์ ํต์ ์ด ๋ง์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ค. ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์๋ฒ ๊ฐ ํต์ ๋ฟ๋ง ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์น ํด๋ผ์ด์ธํธ ์ ์๋ฒ๊ฐ์๋ REST API ํต์ ์ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ REST ์๋น์ค(๋ฆฌ์์ค) ์ ๋ํ ๋ณด์์ด ์ค์ํด ์ง๊ณ ์๋ค.
- ์ธ์ฆ(Authentication): ์๋น์(ํด๋ผ์ด์ธํธ) ๊ฐ ์๋น์ค(๋ฆฌ์์ค) ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ์๋น์์ธ์ง
- ์ธ๊ฐ/๊ถํ๋ถ์ฌ(Authorization) : ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง ํด๋น ์์ ์ ์๋น์(ํด๋ผ์ด์ธํธ) ์๊ฒ ํ์ฉํ ๊ฒ์ธ์ง
์ธ์ฆ๋ฐฉ์์ ๋ค์ํ๋ฉฐ, ์ ํต์ ์ธ ์ธ์ฆ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉ์๋ช
(Principle
)๊ณผ ๋น๋ฐ๋ฒํธ(Credential
)๋ก ์ธ์ฆํ๋ Credential ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์ ๊ณผ OTP ๋ฑ๊ณผ ๊ฐ์ด ์ถ๊ฐ์ ์ธ ์ธ์ฆ๋ฐฉ์์ ๋์
ํด 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ฆํ๋ ์ด์ค ์ธ์ฆ ๋ฐฉ์ ๊ณผ ์ต๊ทผ์๋ OAuth2 ์ธ์ฆ๋ฐฉ์ ๋ ํ์์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
์คํ๋ง์์๋ Spring Security
๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ๊ณผ ๊ถํ ํ๋ก์ธ์ค ๊ตฌํํ ์ ์๋ค.
์คํ๋ง๋ถํธ์์ ์ธ์ฆ๋ฐฉ์ ๊ตฌํํ๊ธฐ
์คํ๋ง ์ํ๋ฆฌํฐ๋ก ์๋ ๋ ๊ฐ์ง ํ์ ์ ์ธ์ฆ์ ๊ฐ๊ฐ ๊ตฌํํด ๋ณธ๋ค.
- ๊ธฐ๋ณธ์ธ์ฆ (Basic Authentication)
- OAuth 2.0 ์ธ์ฆ
์์กด์ฑ ์ถ๊ฐํ๊ธฐ
spring-boot-starter-security
์์กด์ฑ์ pom.xml
๋๋ build.gradle
์ ์ถ๊ฐํ๋ค.
pom.xml
|
|
build.gradle
|
|
๊ธฐ๋ณธ์ธ์ฆ
spring-boot-starter-security
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์๋น์ค์ ๋ํด ๊ธฐ๋ณธ ์ธ์ฆ์ ์๋์ผ๋ก ์ค์ ํ๋ค.- ๋ธ๋ผ์ฐ์ ์์๋ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋๋๊ฑฐ๋, REST API ์์ฒญ ์ ์๋ต ์ฝ๋ 401 ์ ๋ฆฌํดํ๊ฒ ๋๋ค.
- ๊ธฐ๋ณธ ์ธ์ฆ์ ์ฌ์ฉ์ ID ๋ user ์ด๋ฉฐ, ํจ์ค์๋๋ ๋ณดํต ์คํ๋ง ์ดํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ ์ ๋ก๊ทธ์ ํ์๋๋ค.
ํน์ ID ์ ํจ์ค์๋๋ฅผ ์ค์ ํ๋ ค๋ฉด application.properties
(๋๋ application.yml
) ์ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ ์ ์๋ค.
application.yml
|
|
ํตํฉ ํ ์คํ
|
|
- HTTP ์์ Basic Authentication ์ธ์ฆ์ HTTP ์ฌ์ฉ์ Agent (ex. ์น ๋ธ๋ผ์ฐ์ ) ๊ฐ ์์ฒญํ ๋ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ํธ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ธฐ๋ณธ HTTP ์ธ์ฆ ์์ฒญ Header ํ๋์
Authorization: Basic <credentials>
ํํ๋ก ํฌํจ๋๋ค. ์ฌ๊ธฐ์credentials
์ ์ฝ๋ก ์ผ๋ก ๊ฒฐํฉ ๋ ID ๋ฐ ์ํธ์ base64 ์ธ์ฝ๋ฉ ํํ์ด๋ค. - Authorization : https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Authorization
๋จ์ ํ ์คํ
๋จ์ ํ
์คํธ์ ๋ณด์์ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด @WebMvcTest
์ด๋
ธํ
์ด์
์ secure=false
ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ๋ค.
|
|