Spring_Naver_SSO
오늘은 소셜 로그인 2번째로 네이버를 진행했습니다. 구글님?에께 아는 내용과 네이버 개발자 사이트를 참고해서 만들어 보았습니다.
먼저 해야 할일
네이버 역시 구글의 프로젝트 처럼 API애플리케이션을 만들어야 합니다. 저는 네이버로그인을 할 것임으로 애플리케이션 등록 사이트에 들어가서 이름을 정하고 아래의 선택은 네아로(네이버 아이디로 로그인)
를 선택하면된다.
- 네아로를선택하게 되면 자신의 사이트에 필요한 내용을 선택을 합니다.
- 환경추가로는 웹 을 추가합니다.
- 하단의 서비스 URL에는 구글과 같이 자신의 사이트 URL을 위에 적어줍니다.
- Callback은 역시 로그인이 성공하면 이동한 주소를 적어줍니다.
- 이제 내애플리케이션에 들어가면 ClientID와 ClientSecret 이 생겼습니다.
pom.xml 추가하기
소셜 로그인 라이브러리 추가(네이버편)
네이버 로그인 구현은 깃허브에 올라와 있습니다.
<!-- naver -->
<dependency>
<groupId>com.github.scribejava</groupId>
<artifactId>scribejava-core</artifactId>
<version>2.8.1</version>
</dependency>
Scribe library용 Naver Login 구현체 만들기
public class NaverLoginApi extends DefaultApi20 {
protected NaverLoginApi() {
}
private static class InstanceHolder {
private static final NaverLoginApi INSTANCE = new NaverLoginApi();
}
public static NaverLoginApi instance() {
return InstanceHolder.INSTANCE;
}
@Override
public String getAccessTokenEndpoint() {
return "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code";
}
@Override
protected String getAuthorizationBaseUrl() {
return "https://nid.naver.com/oauth2.0/authorize";
}
}
Scribe Library를 이용하여 네아로 인증 버튼을 위한 url생성
위에서 만든 구현체를 이용해서 네이버 로그인을 위한 url을 만들어 줍니다.
public class NaverLoginBO {
private final static String CLIENT_ID = "자신의 CLIENT_ID";
private final static String CLIENT_SECRET = "자신의 CLIENT_SECRET";
private final static String REDIRECT_URI = "자신이 작성한 로그인 성공시 url";
public String generateState()
{
SecureRandom random = new SecureRandom();
return new BigInteger(130, random).toString(32);
}
/* 네아로 인증 URL 생성 Method */
public String getAuthorizationUrl(HttpSession session) {
String state = generateState();
session.setAttribute("state", state);
/* Scribe에서 제공하는 인증 URL 생성 기능을 이용하여 네아로 인증 URL 생성 */
OAuth20Service oauthService = new ServiceBuilder()
.apiKey(CLIENT_ID)
.apiSecret(CLIENT_SECRET)
.callback(REDIRECT_URI)
.state(state)
.build(NaverLoginApi.instance());
return oauthService.getAuthorizationUrl();
}
}
Controller Class에서 BO Class를 이용할 수 있도록 Bean등록(dispatcher-servlet.xml에 추가)
<bean id="naverLoginBO" class="com.naver.naverlogintutorial.oauth.bo.NaverLoginBO" />
Controller 생성
저의 경우 구글 로그인과 섞여 있습니다.
@RequestMapping(value = "login.do")
public String initLogin(Model model, HttpSession session) throws Exception {
/* 구글code 발행 */
OAuth2Operations oauthOperations = googleConnectionFactory.getOAuthOperations();
String googleAuthurl = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, googleOAuth2Parameters);
String naverAuthUrl = naverLoginBO.getAuthorizationUrl(session);
/* 생성한 인증 URL을 View로 전달 */
model.addAttribute("naver_url", naverAuthUrl);
model.addAttribute("google_url", googleAuthurl);
/* 생성한 인증 URL을 Model에 담아서 전달 */
return "page1/login.all";
}
네이버 로그인 버튼 생성
저의 경우 간단한 이미지를 가져와서 연결만 했습니다.
<a href="${naver_url}"><img height="30" src="http://static.nid.naver.com/oauth/small_g_in.PNG"/></a>
추가편
콜백페이지 생성(컨트롤러 추가)
까먹고 콜백페이지 연결을 안했습니다.
// 네이버 Callback호출 메소드
@RequestMapping(value = "naverLoginCallback.do")
public String naverCallback() throws IOException {
System.out.println("naver login success");
return "main/main.tiles";
}
저의 경우 성공을 하면 메인 페이지로 이동하도록 했습니다.
끝
로그인은 이걸로 끝이 났습니다. 너무나도… 간단하게 끝이 납니다. 하지만 저는 헤매면서 했습니다. 내용이 좀 길어질거 같아 네이버 로그인 2편에서 개발자 페이지에서 선택한 프로필정보를 가져와서 뿌려보겠습니다.