티스토리 뷰

728x90

네이버 로그인 API(OAuth 2.0) 연동하기

1. 네이버 개발자센터 설정

https://developers.naver.com

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

 

- 내 애플리케이션에 접속

내 애플리케이션

 

- 애플리케이션 등록

애플리케이션 등록

 

- 애플리케이션이름, 사용 API 선택 후 추가 정보 입력.

애플리케이션 생성

 

API 정보 입력

 

- 애플리케이션 생성후 개요 탭에서 Client ID, Client Secret 복사

애플리케이션 정보 복사

 

2. 웹사이트에서 네이버 API 연동 작업(PHP)

네이버 로그인 화면 호출
// 사이트 자체팝업 오픈후 onload시 form값 넘기는 방식 //
var nv_popup = window.open("/Oauth2/nv_popup.php", "naver", "location=0,status=0,scrollbars=1,width=600,height=500");
if(!nv_popup || nv_popup.closed || typeof nv_popup.closed == "undefined") {
	alert('브라우저에서 팝업이 차단되어 있습니다. 팝업 활성화 후 다시 시도해 주세요.');
}

// nv_popup.php 팝업 //
// 네아로 인증요청시 사이트간 요청위조 공격을 방지하기 위한 state 
function _get_naver_state() {
	$mt = microtime();
    $rand = mt_rand();
    return md5($mt . $rand);
}

$client_id = {YOUR_CLIENT_ID};
$redirectURI = {YOUR_CALLBACK_URL};
$naver_state = _get_naver_state();

// onload form submit //
<form name="nv_form" method="post" action="https://nid.naver.com/oauth2.0/authorize?response_type=code">
<input type="hidden" name="client_id" value="<?=$client_id?>" />
<input type="hidden" name="redirect_uri" value="<?=$redirectURI?>" />
<input type="hidden" name="state" value="<?=$naver_state?>" />
</form>
<script type="text/javascript">
$(document).ready(function() {
	$("form[name='snsForm']").submit();
});
</script>

 

Callback URL 

 

- state : 콜백으로 전달받는 상태 토큰(애플리케이션이 생성한 상태 토큰과 일치해야 합니다.)

- code : 콜백으로 전달받은 인증코드(authentication code) 접근 토큰발급에 사용합니다.

 

접근 토큰 발급요청

 

접근 토큰발급에 필요한 정보

 

- client_id : 애플리케이션 등록 후 발급받은 클라이언트 아이디
- client_secret : 애플리케이션 등록 후 발급받은 클라이언트 비밀번호
- grant_type : 인증 타입에 대한 구분값, authorization_code로 값이 고정되어 있습니다.
- state : 애플리케이션이 생성한 상태 토큰
- code : 콜백으로 전달받은 인증코드 

 

$client_id = {YOUR_CLIENT_ID};
$client_secret = {YOUR_CLIENT_SECRET};
$redirectURI = {YOUR_REDIRECT_URI};
$code = $_GET['code'];
$state = $_GET['state'];
$url = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=".$client_id."&client_secret=".$client_secret."&redirect_uri=".$redirectURI."&code=".$code."&state=".$state;
$is_post = false;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status_code == 200)
{
	$nv = json_decode($response);
	$result = get_object_vars($nv);
	$token = $result['access_token'];	// 토큰값
}

 

네이버 사용자 프로필 정보 조회

 

접근 토큰을 성공적으로 발급받았다면 접근 토큰을 이용해 네이버 사용자의 프로필 정보를 조회합니다.

 

$client_id = {YOUR_CLIENT_ID};
$client_secret = {YOUR_CLIENT_SECRET};
$token = $result['access_token'];	// 리턴받은 토큰값
$header = "Bearer ".$token;			// Bearer(토큰타입) 다음에 공백 추가
$url = "https://openapi.naver.com/v1/nid/me";
$is_post = false;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = "Authorization: ".$header;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);

if($status_code == 200)
{
	$nv = json_decode($response);
    $vars = get_object_vars($nv);
    $result = get_object_vars($vars['response']);
    $profile = $result;
}

 

네이버 사용자 프로필 정보조회 필수정보 동의 누락시 재동의 화면으로 이동

 

이름 및 이메일주소등 필요한 정보가 조회조회 되지 않을 경우 동의화면으로 돌아가게 합니다.

// 이름 또는 이메일주소가 조회되지 않을경우 //
if(!$profile['email'] || !$profile['name']) {
	$client_id = {YOUR_CLIENT_ID};
	$redirectURI = {YOUR_REDIRECT_URI};
	$nv_state = _get_naver_state();		// 네아로 인증요청시 사이트간 요청위조 공격을 방지하기 위한 state

	$url = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=".$client_id."&state=".$naver_state."&redirect_uri=".$redirectURI."&auth_type=reprompt";

	gourl($url, "", "이름 및 이메일은 필수정보입니다. 정보제공을 동의해주세요.");
	exit;
}

 

리턴 받은 네이버 사용자 프로필 정보 사이트내 DB 처리

 

사용자 프로필 정보를 자체 DB에 저장후 네이버 로그인 시 비교 후 로그인 하면 됩니다.

 

네이버 로그인 API 검수
728x90

'프로그램개발' 카테고리의 다른 글

[Javascript] Location 객체  (0) 2024.03.20
@media print  (0) 2024.03.19
Javascript 로드 방식 async 와 defer  (0) 2024.02.15
MySQL 스토리지 엔진(Storage Engine) MyISAM과 InnoDB 설명 및 비교  (0) 2024.01.10
Geolocation API  (0) 2024.01.03
250x250
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Total
Today
Yesterday