[Spring Boot] 스프링 시큐리티, 네이버 OAuth 2.0 로그인
2020. 9. 17. 21:51ㆍSpring/Spring Boot
1. 네이버 로그인
1) 네이버 오픈 API
네이버 오픈 API에 필요한 항목을 채운다.(developers.naver.com/apps/#/register?api=nvlogin)
2) application-oauth.properties
발급받은 클라이언트 ID와 비밀 보안 키를 등록한다. 네이버에서는 스프링 시큐리티를 공식 지원하지 않기 때문에 CommonOAuth2Provider에서 해주던 값들도 전부 수동으로 입력해주어야 한다.
어노테이션 및 코드 | 설명 |
user_name_attribute=response | 기준이 되는 user_name의 이름을 네이버에서는 response로 지정해야한다. 그 이유는 네이버의 회원 조회 시 반환되는 JSON 결과의 응답값 최상위 필드가 resultCode, message, response이며, response가 본문을 담고 있기 때문이다. |
# registration
spring.security.oauth2.client.registration.naver.client-id=[클라이언트 ID]
spring.security.oauth2.client.registration.naver.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
3) OAuthAttributes.java
기존에 생성한 클래스에 네이버인지 판단하는 코드와 네이버 생성자만 추가해주면 된다.
package com.springbook.biz.config.auth.dto;
import com.springbook.biz.domain.user.Role;
import com.springbook.biz.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();
}
...
}
4) index.mustache
네이버 로그인 버튼에 해당하는 네이버 로그인 URL은 application-oauth.properties에 등록한 redirect-uri 값에 맞춰 자동으로 등록된다. /oauth/authorization/ 까지는 고정이며 마지막 Path만 각 소셜 로그인 코드를 사용하면된다. 현재 진행된 프로젝트의 마지막 Path는 naver 이다.
5) 구현 화면
[참고] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
728x90
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] AWS 배포 (1) (0) | 2020.09.18 |
---|---|
[Spring Boot] 테스트 시큐리티 적용 (0) | 2020.09.17 |
[Spring Boot] 스프링 시큐리티, 구글 OAuth 2.0 로그인 (2) (0) | 2020.09.17 |
[Spring Boot] 스프링 시큐리티, 구글 OAuth 2.0 로그인 (1) (0) | 2020.09.17 |