PHP

[PHP] 카카오 로그인 - 엑세스 토큰 발급 받기

dev-mint 2022. 3. 7. 14:58

 

카카오 로그인을 사용하기 위해 엑세스 토큰을 발급받아보겠습니다.

엑세스 토큰(Access Token)은 사용자 인증과 카카오 API 호출 권한을 부여하는 토큰입니다.

 

카카오 API에서 제공하는 기능
 
 
 
카카오 로그인이 진행되는 과정
 
 
 
간단하게 액세스 토큰을 발급받는 과정을 포스팅 해보겠습니다.
 
 
 
<1> 카카오 로그인을 사용하기 위한 설정
 
 
 
1. 활성화 설정과 Redirect URI 등록
 
카카오 개발자사이트 내 어플리케이션 > 제품설정 > 카카오 로그인
 

 

활성화 설정의 상태를 ON으로 변경한 후 Redirect URI를 등록해 줍니다.

 

Redirect URI는 사용자가 카카오 카카오 계정으로 로그인을 요청하여

 

발급받는 인가 코드(Authorization Code)를 전달받아 처리할 페이지가 됩니다.

 

(이 코드로 토큰요청을 합니다.)

 

저는 토큰요청할 페이지로 kakao_oauth.php 를 생성했습니다.

 

 

2. 앱 키 확인

 

내 어플리케이션 > 앱설정 > 요약 정보

 

 

여기서 REST API 키와 JavaScript 키를 사용할 거에요.

 

 

<2> 프론트에서 로그인 버튼 및 자바스크립트

 

HTML에 카카오 로그인 버튼을 만들고, 카카오 API를 사용하기위해 SDK와 로그인 호출 함수도 추가합니다.

 

 

🧾 login.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>카카오 로그인</title>
</head>
<body>
    <!-- 로그인 버튼 -->
    <button type="button" onclick="loginWithKakao()">
        <img src="https://k.kakaocdn.net/14/dn/btroDszwNrM/I6efHub1SN5KCJqLm1Ovx1/o.jpg">
    </button>
    
    <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script><!-- SDK -->
    <script>
        Kakao.init('b86e26532d1e37...'); // JavaScript 키 입력

        function loginWithKakao() {
            Kakao.Auth.authorize({
                redirectUri: 'http://.../kakao_oauth.php', // 앞서 등록한 Redirect URI
            });
        }

    </script>
</body>
</html>

 

 

버튼을 눌러 카카오 계정으로 로그인을 하면 동의창이 나오는데요.

동의항목을 추가하고 싶은 경우 

내 어플리케이션 > 제품 설정 > 카카오 로그인 > 동의항목에서 추가로 설정이 가능합니다.

 

"동의하고 계속하기"를 클릭하면 등록한 Redirect URI로 이동하며

get으로 code 값을 얻을 수 있습니다.

Array
(
    [code] => p6_Q2pxG_OvpYzerb5mGKBMB-967wcvkbsU9Mv6PF1myJJhR61VY4U9gy64hYcuby_3pTwopcFEAAAF_Ytt4Kw
)

 

 

 

<3> 엑세스 토큰 구하기

 

code 값으로 엑세스 토큰을 구해봅니다.

 

 

🧾 kakao_oauth.php

<?php
$rest_api_key = "311cbd76cb7e7d5f4...";        // REST API 키
$redirect_uri = "http://.../kakao_oauth.php";  // Redirect URI
$code = $_GET['code'];

// 1) 사용자 토큰받기
$shell_string = "curl -v -X POST https://kauth.kakao.com/oauth/token -d 'grant_type=authorization_code' -d 'client_id={$rest_api_key}' -d 'redirect_uri={$redirect_uri}' -d 'code={$code}'";
$output = shell_exec($shell_string);
$token_json = json_decode($output, true);

// 토큰발급 실패
if (!$token_json['access_token']) {
    die("카카오 로그인에 실패했습니다. 다시 시도해 주세요.");
}

// 2) 사용자 정보받기
$shell_string = "curl -v -X POST https://kapi.kakao.com/v2/user/me -H 'Authorization: Bearer {$token_json['access_token']}'";
$output2 = shell_exec($shell_string);
$user_info_json = json_decode($output2, true);


// 이후 사용하는 user DB에 회원가입 로직 실행

 

사용자 정보를 받은 이후 회원가입 로직을 실행하면 됩니다.

 

아래는 엑세스 토큰발급 데이터와 사용자정보 데이터입니다.

 

 

📌 토큰 받기

// $token_json 정보
Array
(
    [access_token] => SxHTQgsQ20BPxsmXWqqpFG0DyKVbNMlI6RDtlwo9dZwAAAF_Yu
    [token_type] => bearer
    [refresh_token] => wg6fY28k4zM6imZVEBkshnIbzbreh6USUHxbAwo9dZwAAAF_Yu
    [expires_in] => 21599
    [refresh_token_expires_in] => 5183999
)

 

 

📌 사용자 정보 가져오기

// $user_info_json 정보
Array
(
    [id] => 214972...
    [connected_at] => 2022-03-07T05:39:14Z
)