728x90
이번엔 네이버 로그인을 작업해보려 한다.
지난 포스팅을 참고하고, 이어서 작업하려 한다.
https://devhooney.tistory.com/101
1. 네이버 개발자 센터
- 상단 메뉴의 Application에서 애플리케이션 등록 클릭하여 이름을 작성하고 사용 API selectbox에서 네이버 로그인 선택
- checkbox가 나오면 회원이름, 이메일 주소 필수에 체크
- 로그인 오픈 API서비스 환경 selectbox에 PC웹 선택 후 등록하기 클릭
- 내 애플리케이션 목록에 새로 만든 앱을 클릭하면 Client ID, Client Secret 정보가 있다.
2. application.yml 수정
security:
oauth2:
client:
registration:
google:
client-id: 구글
client-secret: 구글
scope: email, profile
facebook:
client-id: 페이스북
client-secret: 페이스북
scope: email, public_profile
naver:
client-id: 네이버
client-secret: 네이버
scope: name, email
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: http://localhost:8080/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 # 회원정보를 json 으로 받는데 response 라는 키값으로 네이버가 리턴해줌
- 네이버는 Oauth Client 라이브러리에서 기본 제공해주지 않기 때문에 Provider 설정을 추가로 해줘야 한다.
- 공식문서를 참고 했으니 클라이언트 아이디와 시크릿만 제외하고 그대로 사용해도 된다.(scope를 제외한 나머지는 그대로 사용해야함)
3. PrincipalOauth2UserService 수정
- 페이스북 때와 마찬가지로 네이버 관련 설정만 추가하면 된다.
OAuth2User oAuth2User = super.loadUser(userRequest);
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"));
} else {
System.out.println("Only Google and Facebook and naver.");
}
- 네이버는 getAttibutes()를 System.out.println()으로 확인해보면 원하는 값들이 "response"라는 객체 안에 있으므로 get을 이용해서 꺼내 사용해야 한다.
4. provider 패키지 안에 NaverUserInfo 클래스 추가
public class NaverUserInfo implements OAuth2UserInfo{
private Map<String, Object> attributes; // 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");
}
}
5. loginForm.html 수정
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
</head>
<body>
<h1>로그인 페이지</h1>
<hr>
<form action="/login" method="POST">
<input type="text" name="username" placeholder="Username"><br>
<input type="password" name="password" placeholder="Password"><br>
<button>로그인</button>
</form>
<a href="/oauth2/authorization/google">구글 로그인</a>
<a href="/oauth2/authorization/facebook">페이스북 로그인</a>
<a href="/oauth2/authorization/naver">네이버 로그인</a>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
</html>
6. 확인
728x90
'개발 > Java&Kotlin' 카테고리의 다른 글
[Java] 쓰레드(Thread)의 기초 (1) | 2022.09.14 |
---|---|
[Java] 열거형(enums) (0) | 2022.09.13 |
[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Facebook) (0) | 2022.09.01 |
[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Google) (0) | 2022.08.31 |
[Spring] 스프링시큐리티 예제 (2) | 2022.08.29 |