스프링 부트와 AWS로 혼자 구현하는 웹 서비스
: 인텔리제이, JPA, JUnit 테스트, 그레이들, 소셜 로그인, AWS 인프라로 무중단 배포까지
이동욱 저
Table of Content
네이버 디벨로퍼스 앱 생성
네이버 오픈 API로 이동하여 어플리케이션을 등록한다.
각 항목에 값들을 입력하면 Client ID, Client Secret 키를 받을 수 있다.
application-oauth.properties 에 정보 입력
키 값들을 입력해야한다. 네이버에서는 스프링 시큐리티를 공식 지원하지 않기 때문에 CommonOAuth2Provider에서 해주던 값들도 전부 수동으로 입력해야 한다.
...
# Naver Login
# registration
spring.security.oauth2.client.registration.naver.client-id={Client_ID}
spring.security.oauth2.client.registration.naver.client-secret={Client_SECRET}
spring.security.oauth2.client.registration.naver.redirect-uri={baseUrl}/{action}/oauth2/code/{registrationId}
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.naver.scope=name,email,profile_image
spring.security.oauth2.client.registration.naver.client-name=Naver
# provider
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response
Java
복사
OAuthAttributes.java 에 Naver 부분 추가
Google 로그인 구현으로 기본적인 로그인 API 요청 틀이 만들어져 있으므로 Naver는 조건문으로만 추가하고 ofNaver()로 구분하여 반환 데이터를 담으면 된다.
package com.citefred.ldwspring.config.auth.dto;
import com.citefred.ldwspring.domain.user.Role;
import com.citefred.ldwspring.domain.user.User;
import lombok.Builder;
import lombok.Getter;
import java.util.Map;
@Getter
public class OAuthAttributes {
...
public static OAuthAttributes of(String registrationId, String userNameAttributeName, Map<String, Object> attributes) {
if("naver".equals(registrationId)) {
return ofNaver("id", attributes);
}
return ofGoogle(userNameAttributeName, attributes);
}
...
private static OAuthAttributes ofNaver(String userNameAttributeName, Map<String, Object> attributes) {
Map<String, Object> response = (Map<String, Object>) attributes.get("response");
return OAuthAttributes.builder()
.name((String) response.get("name"))
.email((String) response.get("email"))
.picture((String) response.get("profile_image"))
.attributes(response)
.nameAttributeKey(userNameAttributeName)
.build();
}
...
}
Java
복사
index.mustache 에 로그인 요청 버튼 생성
<h1>스프링부트로 시작하는 웹 서비스 Ver.2</h1>
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
...
{{^userName}}
<a href="/oauth2/authorization/google" class="btn btn-success active" role="button">Google Login</a>
<a href="/oauth2/authorization/naver" class="btn btn-success active" role="button">Naver Login</a>
{{/userName}}
</div>
...
Java
복사
네이버 로그인 작동 테스트
Related Posts
Search