유튜브에서 스프링시큐리티를 심화교육하면서 조금더 레벨업 하고자 한다.
IDE : IntelliJ
언어 : Java 8
스프링부트 버전 : 2.7.13
DB : MySQL
빌드관리 도구 : Maven
OS : iOS
참고유튜브 : 메타코딩
구글, 페이스북에 이어서 네이버 OAuth 로그인을 진행해보자
네이버 개발자 센터로 이동
https://developers.naver.com/main/
application -> 애플리케이션 등록 선택
애플리케이션 이름을 설정해준 후 회원이름과 이메일에 체크
서비스 Url에 http://localhost:portnumber 입력
callback url에는 http://localhost:portnumber/login/oauth2/code/naver 입력
아이디와 비밀번호는 application.yml에 작성을 해야하기 때문에 메모장에 적어놓거나 페이지 유지
loginForm에서 네이버 로그인 a태그 추가
application.yml에 다음과 같이 작성 해준다.
구글과 페이스북은 정식으로 지원해주기 때문에 provider를 작성해줄 필요 없지만 네이버는 지원을 해주지 않기 때문에
우리가 직접 설정을 해줘야 한다.
client-id 와 client-secret 에 아까 애플리케이션 정보에 있던 아이디와 비밀번호를 입력해준다.
naver:
client-id: 아이디
client-secret: 비밀번호
scope:
- name
- email
- profile_image
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: http://localhost:8088/login/oauth2/code/naver
provider:
naver:
authorization-uri: https://nid.naver.com/oauth2.0/authorize
token-uri: https://nid.naver.com/oauth2.0/token
user-info-uri: https://openapi.naver.com/v1/nid/me
user-name-attribute: response
provider에 왜 해당 주소들을 넣어야 하는지 개발가이드를 보면 확인할 수 있다.
application.yml을 설정 후 provider패키지에서 GoogleUserInfo클래스를 복사해서 NaverUserInfo 클래스를 생성하고 아래와 같이 수정해준다.
public class NaverUserInfo implements OAuth2UserInfo{
private Map<String, Object> attributes;
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");
}
}
서버를 실행해서 네이버로 로그인을 시도를 해서 해당 유저의 정보를 확인해보기 위해서 /user로 접근을 시도하면 서버에선 에러가 발생하고 콘솔에선 해당 유저의 정보를 확인할 수 있다.
여기서 중요한점은 response에 아이디와 이메일, 이름이 담겨져서 값이 넘어온다는 점이다.
그렇기 때문에 PrincipalOauth2UserService로 이동해서 아래와 같이 수정해준다.
NaverUserInfo에 response에 담겨진 정보들을 Map타입으로 형변환을 한 후 값을 db에 저장해주면 된다.
OAuth2UserInfo oAuth2UserInfo = null;
if(userRequest.getClientRegistration().getRegistrationId().equals("google")){
oAuth2UserInfo = new GoogleUserInfo(oAuth2User.getAttributes());
} else if (userRequest.getClientRegistration().getRegistrationId().equals("facebook")) {
oAuth2UserInfo = new FacebookUserInfo(oAuth2User.getAttributes());
} else if (userRequest.getClientRegistration().getRegistrationId().equals("naver")) {
oAuth2UserInfo = new NaverUserInfo((Map) oAuth2User.getAttributes().get("response"));
}
그 후 다시 네이버로 로그인을 시도해보면 네이버로 로그인을 해도 값이 db에 잘 저장된것을 확인할 수 있다.
'프로젝트 > SpringSecurity' 카테고리의 다른 글
[Spring Security] 11. JWT를 이용하기위한 filter 등록 테스트 (0) | 2023.07.11 |
---|---|
[Spring Security] 10. JWT를 이용하기위한 security 설정 (0) | 2023.07.11 |
[Spring Security] 8. OAuth 페이스북로그인 (0) | 2023.07.06 |
[Spring Security] 7. OAuth 구글로그인(4) (0) | 2023.07.05 |
[Spring Security] 6. OAuth 구글로그인(3) (0) | 2023.07.05 |
댓글