답변 1개
채택된 답변
+20 포인트
1년 전
Keycloak 설정 후
서버에 라이브러리 설치
composer require steverhoades/oauth2-keycloak
로그인 콜백파일 생성
예) plugin/keycloak/callback.php
Copy
//callback.php 파일 내용
<?php
require_once __DIR__ . '/vendor/autoload.php';
use League\OAuth2\Client\Provider\GenericProvider;
$provider = new GenericProvider([
'clientId' => '<클라이언트아이디>',
'clientSecret' => '<클라이언트시크릿>',
'redirectUri' => 'https://서버도메인/plugin/keycloak/callback.php',
'urlAuthorize' => 'https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/auth',
'urlAccessToken' => 'https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/token',
'urlResourceOwnerDetails' => 'https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/userinfo'
]);
if (!isset($_GET['code'])) {
$authorizationUrl = $provider->getAuthorizationUrl();
header('Location: ' . $authorizationUrl);
exit;
} else {
try {
// Access Token 요청
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
// 사용자 정보 가져오기
$resourceOwner = $provider->getResourceOwner($accessToken);
$user = $resourceOwner->toArray(); // Keycloak 사용자 정보 배열
// 사용자 정보 매핑
$keycloak_id = $user['sub']; // Keycloak 고유 ID
$username = $user['preferred_username'];
$email = $user['email'];
$name = $user['name'];
// 그누보드 DB에서 사용자 확인
$sql = "SELECT COUNT(*) AS cnt FROM g5_member WHERE mb_id = '{$username}'";
$result = sql_fetch($sql);
if ((int)$result['cnt'] === 0) {
// 사용자 추가
$insert_sql = "INSERT INTO g5_member (mb_id, mb_email, mb_name, mb_datetime, mb_ip) VALUES ('{$username}', '{$email}', '{$name}', NOW(), '{$_SERVER['REMOTE_ADDR']}')";
sql_query($insert_sql);
}
// 세션에 사용자 정보 저장
$_SESSION['mb_id'] = $username;
$_SESSION['mb_name'] = $name;
$_SESSION['mb_email'] = $email;
// 그누보드 메인으로 리다이렉트
header('Location: /');
exit;
} catch (\Exception $e) {
echo 'Failed to authenticate: ' . $e->getMessage();
exit;
}
}
?>
//로그인 페이지에 키클락 로그인 버튼 추가하기
<a href="<경로>/plugin/keycloak/callback.php">키클락 로그인</a>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인