๐Ÿ’ป ์ฝ”๋”ฉ ์ผ๊ธฐ : [Spring Security] 'OAuth2 ์นด์นด์˜ค ๋กœ๊ทธ์ธ' ํŽธ

ybkยท2024๋…„ 5์›” 26์ผ

spring

๋ชฉ๋ก ๋ณด๊ธฐ
31/55
post-thumbnail

๐Ÿ”” 'OAuth2 ์นด์นด์˜ค ๋กœ๊ทธ์ธ'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!


๐Ÿ’Ÿ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

#OAuth2 
spring.security.oauth2.client.registration.kakao.client-id=[ํด๋ผ์ด์–ธํŠธID]
spring.security.oauth2.client.registration.kakao.client-secret=[ํด๋ผ์ด์–ธํŠธ Secret]
spring.security.oauth2.client.registration.kakao.scope=profile_nickname, account_email
spring.security.oauth2.client.registration.kakao.client-name=Kakao
spring.security.oauth2.client.registration.kakao.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.kakao.redirect-uri=http://localhost:8080/login/oauth2/code/kakao
# provider
spring.security.oauth2.client.registration.kakao.client-authentication-method=client_secret_post
spring.security.oauth2.client.provider.kakao.authorization-uri=https://kauth.kakao.com/oauth/authorize
spring.security.oauth2.client.provider.kakao.token-uri=https://kauth.kakao.com/oauth/token
spring.security.oauth2.client.provider.kakao.user-info-uri=https://kapi.kakao.com/v2/user/me
spring.security.oauth2.client.provider.kakao.user-name-attribute=id
  • application.properties ํŒŒ์ผ ๋จผ์ € ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. ์นด์นด์˜ค์—์„œ ๋กœ๊ทธ์ธ api ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋กํ•œ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ ID์™€ ํด๋ผ์ด์–ธํŠธ secret ๋ฐ›์•„์„œ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
    ์นด์นด์˜ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก

1. KakaoMemberInfo ํด๋ž˜์Šค (OAuth2MemberInfo ๊ตฌํ˜„)

public class KakaoMemberInfo implements OAuth2MemberInfo {
    private Map<String, Object> attributes;
    private final Map<String, Object> profileAttributes;

    public KakaoMemberInfo(Map<String, Object> attributes) {
        this.attributes = (Map<String, Object>) attributes.get("kakao_account");
        this.profileAttributes = (Map<String, Object>) this.attributes.get("profile");
    }

    @Override
    public String getEmail() {
        return (String) attributes.get("email");
    }

    @Override
    public String getProvider() {
        return "kakao";
    }

    @Override
    public String getProviderId() {
        return (String) attributes.get("id");
    }

    @Override
    public String getNickName() {
        return (String) profileAttributes.get("nickname");
    }
}
  • OAuth2MemberInfo ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์นด์นด์˜ค๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • KakaoMemberInfo ์ƒ์„ฑ์ž์—์„œ๋Š” attributes ๋งต์—์„œ kakao_account ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kakao ๊ณ„์ •์˜ ์†์„ฑ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ profileAttributes ๋งต์—์„œ profile ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ•„ ์ •๋ณด์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • getXXXX() : ๋„ค์ด๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‚ฌ์šฉ์ž ์ •๋ณด์—์„œ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • getProvider() : ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ œ๊ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ณต์ž๋Š” naver์ž…๋‹ˆ๋‹ค.

2. Oauth2MemberService ํด๋ž˜์Šค(DefaultOAuth2UserService)

else if (platform.equals("kakao")) {
    System.out.println("์นด์นด์˜ค ๋กœ๊ทธ์ธ ์š”์ฒญ");
    response = new KakaoMemberInfo((Map) oAuth2User.getAttributes());//์นด์นด์˜ค์— ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด ์ถ”์ถœ
}
  • ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ์— ์ด์–ด ์นด์นด์˜ค ๋กœ๊ทธ์ธ๋„ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ์ฐธ๊ณ 

profile
๊ฐœ๋ฐœ์ž ์ค€๋น„์ƒ~

0๊ฐœ์˜ ๋Œ“๊ธ€