Back/Spring

[Spring/Security] ๊ตฌ๊ธ€ ํšŒ์› ํ”„๋กœํ•„ ์ •๋ณด ๋ฐ›์•„์˜ค๊ธฐ

์—ฅ?์€ 2023. 6. 23. 10:54
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๊ตฌ๊ธ€ ํšŒ์› ํ”„๋กœํ•„ ์ •๋ณด ๋ฐ›์•„์˜ค๊ธฐ

โœ” ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋œ ๋’ค์˜ ํ›„์ฒ˜๋ฆฌ

1) ์ฝ”๋“œ๋ฐ›๊ธฐ (์ธ์ฆ)

2) ์•ก์„ธ์Šคํ† ํฐ (๊ถŒํ•œ)

- ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด Security ์„œ๋ฒ„๊ฐ€ ๊ตฌ๊ธ€์— ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์ƒ๊ธด๋‹ค.

3) ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด

4) ํšŒ์›๊ฐ€์ž…

    4-1) ๊ทธ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ํšŒ์›๊ฐ€์ž…์„ ์ž๋™์œผ๋กœ ์ง„ํ–‰์‹œํ‚ด

    4-2) ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ, ์ด๋ฆ„, ์•„์ด๋””, ์ง‘ ์ฃผ์†Œ ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ฐฝ์ด ๋œธ

 

โž• ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์—‘์„ธ์Šคํ† ํฐ + ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ํ•œ ๋ฐฉ์— ๋ฐ›๋Š”๋‹ค.

 

 

โ—ฝ SecurityConfig.java

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 ๊ฐ•์˜ (์ตœ์ฃผํ˜ธ)

๋ฐ˜์‘ํ˜•