[PHP] 카카오 로그인 - 엑세스 토큰 발급 받기
카카오 로그인을 사용하기 위해 엑세스 토큰을 발급받아보겠습니다.
엑세스 토큰(Access Token)은 사용자 인증과 카카오 API 호출 권한을 부여하는 토큰입니다.
<1> 카카오 로그인을 사용하기 위한 설정
활성화 설정의 상태를 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
)