Blog

[Spring-LDW] 네이버 로그인 구현

Category
Author
citeFred
citeFred
PinOnMain
1 more property
스프링 부트와 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
복사

네이버 로그인 작동 테스트

Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio