[Spring/Security] ๊ตฌ๊ธ ํ์ ํ๋กํ ์ ๋ณด ๋ฐ์์ค๊ธฐ
๐ ๊ตฌ๊ธ ํ์ ํ๋กํ ์ ๋ณด ๋ฐ์์ค๊ธฐ
โ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ด ์๋ฃ๋ ๋ค์ ํ์ฒ๋ฆฌ
1) ์ฝ๋๋ฐ๊ธฐ (์ธ์ฆ)
2) ์ก์ธ์คํ ํฐ (๊ถํ)
- ์ก์ธ์ค ํ ํฐ์ ๋ฐ์ผ๋ฉด Security ์๋ฒ๊ฐ ๊ตฌ๊ธ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ด ์๊ธด๋ค.
3) ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
4) ํ์๊ฐ์
4-1) ๊ทธ ์ ๋ณด๋ฅผ ํ ๋๋ก ํ์๊ฐ์ ์ ์๋์ผ๋ก ์งํ์ํด
4-2) ์ด๋ฉ์ผ, ์ ํ๋ฒํธ, ์ด๋ฆ, ์์ด๋, ์ง ์ฃผ์ ๋ฑ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ ์ฐฝ์ด ๋ธ
โ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ด ์๋ฃ๊ฐ ๋๋ฉด ์ฝ๋๋ฅผ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, ์์ธ์คํ ํฐ + ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด๋ฅผ ํ ๋ฐฉ์ ๋ฐ๋๋ค.
โฝ SecurityConfig.java
SecurityConfig.java ์ ์์ ๊ฐ์ด ์ถ๊ฐํด ์ค๋ค. ์์ง ์๋ฌด ๊ฒ๋ ๋ง๋ค์ด์ง์ง ์์๊ธฐ ๋๋ฌธ์ null์ ์์๋ก ๋ฃ์ด๋๋ค.
โฝ PrincipalOauth2UserService.java ์์ฑ
package com.cos.securityex01.config.oauth;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.streotype.Service;
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
// ๊ตฌ๊ธ๋ก ๋ถํฐ ๋ฐ์ userRequest ๋ฐ์ดํฐ์ ๋ํ ํ์ฒ๋ฆฌ๋๋ ํจ์
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
return super.loadUser(userrequest);
}
}
PrincipalOauth2UserService๋ฅผ ์ด๋ ๊ฒ ์์ฑํด์ฃผ๊ณ ,
.userService(principalOauth2UserService);
SecurityConfig ์ ๊ทธ์ ๋ํ @Autowired๋ฅผ ์์ฑํ ๋ค userService ๊ดํธ ์์ ๋ฃ์ด์ค๋ค.
โ PrincipalOauth2UserService์ loadUser์์
System.out.println(super.loadUser(userRequest).getAttributes());
์ ์ฝ๋๋ฅผ ์ถ๋ ฅํด ๋ณด๋ฉด
{
sub={๊ตฌ๊ธ์ ํ์๊ฐ์
ํ ์์ด๋},
name=์ํฅ๋ฏผ,
given_name=ํฅ๋ฏผ,
family_name=์,
picture={์ฌ์ฉ์ ํ๋กํ์ฌ์ง ์ฃผ์},
email={์ฌ์ฉ์ ์ด๋ฉ์ผ}
email_verified=true,
local=ko
}
์ด๋ฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
sub๋ ๊ตฌ๊ธ์ ํ์๊ฐ์ ํ ์์ด๋๋ก,
private String Provider;
private String ProviderId;
๋ฐ์ดํฐ์ Provider์ ProviderId๋ฅผ ๋ง๋ ๋ค์,
Provider = "google", ProviderId = {๊ตฌ๊ธ์ ํ์๊ฐ์ ํ ์์ด๋} ์ ๊ฐ์ด ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์ฐธ๊ณ : ์ธํ๋ฐ - ์คํ๋ง๋ถํธ ์ํ๋ฆฌํฐ & JWT ๊ฐ์ (์ต์ฃผํธ)