spring.security.oauth2.client.registration.naver.client-id=
spring.security.oauth2.client.registration.naver.client-secret=
spring.security.oauth2.client.registration.naver.scope=name,email
spring.security.oauth2.client.registration.naver.client-name=Naver
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.naver.redirect-uri=http://localhost:8080/login/oauth2/code/naver
여기서 나는 등록하기를 눌러도 페이지 전환이 안되길래 에러가 발생해서 등록이 안되는건줄 알았는데 내 애플리케이션을 확인해보니 등록하기를 여러 번 눌러 몇개나 등록이 되어 있었다. 나처럼 페이지 전환이 안되는 사람들은 참고하자ㅜㅜ
이제 이렇게 나온 id와 password를 application.properties의 각 설정에 넣어주고 프로젝트를 실행해보면 에러가 발생할 것이다. 그 중 에러 메세지 맨 윗줄 끝쪽을 봐보면 아래와 같은 에러가 발생하는걸 확인할 수 있는데, 네이버가 OAuth2 기본제공자가 아니기 때문에 네이버를 위한 설정을 추가해줘야 한다.
- 네이버 같은 경우에는 임의로 설정이 가능하지만 OAuth2의 규칙을 따라서 작성해주자
#naver를 OAuth2 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
# 회원정보를 json으로 받는데 response라는 키값으로 네이버가 리턴해줌
spring.security.oauth2.client.provider.naver.user-name-attribute=response
Provider ID must be specified for client registration 'naver'
spring.security.oauth2.client.client-id=클라이언트id
spring.security.oauth2.client.client-secret=클라이언트암호
spring.security.oauth2.client.access-token-uri=https://nid.naver.com/oauth/token
spring.security.oauth2.client.user-authorization-uri=https://nid.naver.com/oauth/authorize
spring.security.oauth2.client.token-name=oauth_token
spring.security.oauth2.client.authentication-scheme=query
spring.security.oauth2.client.client-authentication-scheme=form
spring.security.oauth2.client.scope=name,email,profile_image
spring.security.oauth2.client.registered-redirect-uri=http://localhost:8080/login/oauth2/code/naver
spring.security.oauth2.client.pre-established-redirect-uri=http://localhost:8080/login/oauth2/code/naver
spring.security.oauth2.client.use-current-uri=false
spring.security.oauth2.client.enable-csrf=true
spring.security.oauth2.client.client-name=Naver
package com.cos.security1.config.oauth.provider;
public class NaverUserInfo implements OAuth2UserInfo{
private Map<String, Object> attributes; // oAuth2User.getAttributes()
public NaverUserInfo(Map<String, Object> attributes) {
this.attributes = attributes;
}
@Override
public String getProviderId() {
return (String) attributes.get("id");
}
@Override
public String getProvider() {
return "naver";
}
@Override
public String getEmail() {
return (String) attributes.get("email");
}
@Override
public String getName() {
return (String) attributes.get("name");
}
}
if (userRequest.getClientRegistration().getRegistrationId().equals("google")) {
System.out.println("구글 로그인 요청");
oAuth2UserInfo = new GoogleUserInfo(oAuth2User.getAttributes());
} else if (userRequest.getClientRegistration().getRegistrationId().equals("facebook")) {
System.out.println("페이스북 로그인 요청");
oAuth2UserInfo = new FacebookUserInfo(oAuth2User.getAttributes());
}else if (userRequest.getClientRegistration().getRegistrationId().equals("naver")) {
System.out.println("네이버 로그인 요청");
oAuth2UserInfo = new NaverUserInfo((Map) oAuth2User.getAttributes().get("response"));
} else {
System.out.println("우리는 구글과 페이스북만 지원해요!!!");
}
getAttributes = {resultcode=00, message=success, response={id=9iNrO26qdPnjM7Kky8tCRBpnjMSzEaeZLejMnCj6p5Y, email=magicofclown@naver.com, name=박의민}}
/user
principalDetails = User(id=4, username=naver_9iNrO26qdPnjM7Kky8tCRBpnjMSzEaeZLejMnCj6p5Y,
password=$2a$10$Div1.ZrOPcuacW.IsoCsquu.Xg1xhNf0mg9fgaabusu8EBl7v2ywS, email=magicofclown@naver.com,
role=ROLE_USER, provider=naver, providerId=9iNrO26qdPnjM7Kky8tCRBpnjMSzEaeZLejMnCj6p5Y,
loginDate=null, createDate=2023-04-09 21:08:34.098)
/user
principalDetails = User(id=2, username=google_105156291955329144943,
password=$2a$10$dzn6DiNSDQWIoxR.BTOiu.ztWb.YabV6fk8YZbqppeIF2DZpZQoja,
email=magicofclown@gmail.com, role=ROLE_USER, provider=google,
providerId=105156291955329144943, loginDate=null, createDate=2023-04-08 22:17:53.812)
-provider가 google인걸 확인할 수 있다.