| 제목 | 네이버 로그인 이용하기 | ||
|---|---|---|---|
| 글쓴이 | 변종원(웅파) | 작성시각 | 2014/10/06 18:29:44 |
|
|
|||
|
http://developer.naver.com/wiki/pages/NaverLogin 에서 이용절차에 따라 이용신청을 하셔야 합니다. 작업할 물리적 주소(Callback URL)가 있어야 신청이 되며 테스트를 할 수 있습니다. 이 주소는 로그인후 이동할 주소입니다. 아래와 같이 간단한 프로그램을 작성했습니다.
//csrf를 막기위한 체크값 생성함수
function generate_state() {
$mt = microtime();
$rand = mt_rand();
return md5($mt . $rand);
}
$p['state'] = generate_state();
$p['client_id'] = '로그인이용신청후 받은 클라이언트아이디';
$p['client_secret'] = '시크릿키';
$p['response_type'] = 'code';
$p['redirect_url'] = '로그인후 이동할 주소'; //여기서는 현재 파일을 그대로 이용
//네이버 로그인 등록시 입력한 주소입니다. 틀리면 작동하지 않습니다.
//
$url = 'https://nid.naver.com/oauth2.0/authorize?client_id='.urlencode($p['client_id']).'&response_type=code&redirect_uri='.urlencode($p['redirect_url']).'&state='.$p['state'];
//code는 로그인이 성공하고 나면 redirect_url에 인자로 돌려주는 값입니다.
//이 값이 있어야 access_token을 요청할 수 있습니다.
if(!$_GET['code']) {
header('Location: ' . $url);
}
//위 요청을 하게되면 네이버 로그인창이 뜹니다. (정보동의 과정이 나올수도 있습니다)
//이 라인은 네이버 로그인창에서 로그인이 끝나고 나서 redirect_url에 code를 전송했을때
//실행됩니다.
if($_GET['code'])
{
$p['code'] = $_GET['code'];
}
//access_token을 요청하는 주소. 위 검증코드가 있어야 실행됩니다.
$url2 = 'https://nid.naver.com/oauth2.0/token?client_id='.urlencode($p['client_id']).'&client_secret='.urlencode($p['client_secret']).'&grant_type=authorization_code&state='.$p['state'].'&code='.$p['code'];
$json = file_get_contents($url2);
$data = json_decode($json);
echo $data->access_token;
//여기까지 네이버 로그인후 access_token을 가져옵니다. 로그인만 해도 되는데 access_token을 받아오는 이유는 회원정보나 기타 요청에 access_token이 필요하기 때문입니다. $access_token = '위에서 받은 access_token'; //해시정보를 요청하는 주소입니다. $page = 'https://apis.naver.com/nidlogin/nid/getHashId_v2.xml'; //헤더에 access_token을 담는 부분입니다. $headers = array( "Authorization: Bearer " . $access_token ); //curl을 이용하여 전송합니다. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$page); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); ob_start(); curl_exec($ch); //화면에 출력되는 xml을 변수에 담습니다. $data0 = ob_get_contents(); curl_close($ch); //xml파싱 $xml = simplexml_load_string($data0,'SimpleXMLElement', LIBXML_NOCDATA); //이 아이디가 나온다는 의미는 access_token이 유효하기 때문에 그에 해당하는 정보를 돌려준거라 access_token을 검증하는 의미입니다. echo $xml->response[0]->enc_id[0]; |
|||
| 다음글 | mod_rewrite 간략 정리본 (4) | ||
| 이전글 | ci에서 ajax의 csrf_protection 회피(... (2) | ||
|
한대승(불의회상)
/
2014/10/07 07:57:10 /
추천
0
|
|
변종원(웅파)
/
2014/10/07 09:48:04 /
추천
0
한대승/ 라이브러리는 언제 될지 아무도 몰라요. ㅎㅎㅎ
|
|
들국화
/
2014/10/07 09:49:07 /
추천
0
감사합니다. ^^
|
|
코드이그
/
2014/10/07 12:07:47 /
추천
0
오... 두근두근 하네요 제목만 봐도 ㅋㅋ
|
|
케이든
/
2014/10/07 16:25:00 /
추천
0
좋은 정보 감사합니다
|
좋은 정보 감사 합니다.
고생 하셨습니다. ^^