1. 애플리케이션 등록(오픈 API 신청)
developers.naver.com/apps/#/wizard/register
애플리케이션 - NAVER Developers
developers.naver.com
2. 로그인 요청하기
<a class="btn btn-success" href="https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=nmliM_FmEvrfsR5ZPvjC&redirect_uri=http://localhost:8000/auth/naver/callback" >Naver</a>
- 받은 응답
3. 받은 코드로 엑세스토큰 요청하기(HTTP POST방식으로)
- 간단하게 HTTP POST 요청하기 withseungryu.tistory.com/116
[Spring] 간단하게 HTTP POST 요청하기
💡 POST 요청이란? 서버에 요청하는 방식 클라이언트가 서버에 요청을 할 때 제공해야하는 자원이 있을 때 Get방식은 요청하는 자원을 URL에 뒤에 보내는 반면 POST방식은 URL에 붙이지 않고 따로 데
withseungryu.tistory.com
RestTemplate rt = new RestTemplate();
// HttpHeader 오브젝트 생성
HttpHeaders headers = new HttpHeaders();
headers.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
// HttpBody 오브젝트 생성
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("grant_type", "authorization_code");
params.add("client_id", "nmliM_FmEvrfsR5ZPvjC");
params.add("client_secret", "58rRVbgsh1");
params.add("code", code);
// HttpBody를 하나의 오브젝트에 담기
HttpEntity<MultiValueMap<String, String>> naverTokenRequest =
new HttpEntity<>(params, headers); // naverTokenRequest <- 바디값을 가지고있는 엔티티가 된다.
// Http 요청하기 - POST 방식으로 - 그리고 response 변수의 응답 받음.
ResponseEntity<String> response = rt.exchange(
"https://nid.naver.com/oauth2.0/token",
HttpMethod.POST,
naverTokenRequest,
String.class
);
4. 응답반은 JSON값을 자바 오브젝트로 변경해준뒤 받기
// Gson, Json Simple, ObjectMapper // 응답받은 JSON값 Object로 변경해주는 템플릿
ObjectMapper objectMapper = new ObjectMapper();
OAuthToken oauthToken = null;
try {
oauthToken = objectMapper.readValue(response.getBody(), OAuthToken.class);
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println("네이버 엑세스 토큰 : " + oauthToken.getAccess_token());
return "네이버 엑세스 토큰 : " + oauthToken.getAccess_token();
- 응답값
네이버 엑세스 토큰 : AAAAOliBkD9FWUXmVZdcZNiWc2uvV473Z38iSUtPmzUlyXU2j32u1j0XXx6e8V8O3e6x6MQRe5xuyv7aKK2VWzMzEEE
5. 엑세스토큰을 이용하여 프로필 API 호출하기
RestTemplate rt2 = new RestTemplate();
// HttpHeader 오브젝트 생성
HttpHeaders headers2 = new HttpHeaders();
headers2.add("Authorization", "Bearer " + oauthToken.getAccess_token());
headers2.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
// HttpHeader 를 하나의 오브젝트에 담기
HttpEntity<MultiValueMap<String, String>> naverProfileRequest2 =
new HttpEntity<>(headers2);
// Http 요청하기 - POST 방식으로 - 그리고 response 변수의 응답 받음.
ResponseEntity<String> response2 = rt2.exchange(
"https://openapi.naver.com/v1/nid/me",
HttpMethod.POST,
naverProfileRequest2,
String.class
);
- 응답값
{
resultcode: "00",
message: "success",
response: {
id: "gvJs4EBVUpQ88IDhCUxn9SlUa7rUnNwOTrKIQpZJjTY",
email: {private},
mobile: {private},
mobile_e164: {private},
name: {private}
}
}
6. 응답받은 JSON 값으로 네이버프로필 오브젝트 만들기
jsonschema2pojo
Reference properties For each property present in the 'properties' definition, we add a property to a given Java class according to the JavaBeans spec. A private field is added to the parent class, along with accompanying accessor methods (getter and sette
www.jsonschema2pojo.org
jsonschema2pojo를 사용해서 json값 입력하여 편하게 네이버객체 만들기
package com.cos.blog.model;
public class NaverProfile {
public String resultcode;
public String message;
public Response response;
public class Response {
public String id;
public String email;
public String mobile;
public String mobile_e164;
public String name;
}
}
ObjectMapper objectMapper2 = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
NaverProfile naverProfile = null;
try {
naverProfile = objectMapper2.readValue(response2.getBody(), NaverProfile.class);
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
오브젝트로 변환한뒤 네이버프로필로 회원가입을 진행하면 끝!
자세한 소스코드는 깃허브에 올려놨습니다.
github.com/mingstagram/miniblog
mingstagram/miniblog
miniblog git. Contribute to mingstagram/miniblog development by creating an account on GitHub.
github.com
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 게시글 공유하기 기능 (페이스북, 카카오톡, 트위터) (0) | 2021.05.14 |
---|---|
[Java] 게시글 추천/비추천 기능 (0) | 2021.05.14 |
[Java] 방명록 삭제시 비밀번호입력 일치/불일치 삭제 기능 (0) | 2021.05.13 |
[Java] 페이스북 SNS로그인 (Oauth2.0) (0) | 2021.05.11 |
[Spring] 비밀번호 찾기 기능 임시비밀번호 이메일 발송 기능 (0) | 2021.05.07 |