keycloak 그누보드 연동 문서가 있을까요?
본문
예전에 성공하셨다는 글을 본것 같은데 찾아보니 없네요 ㅜㅜ
답변 1
Keycloak 설정 후
서버에 라이브러리 설치
composer require steverhoades/oauth2-keycloak
로그인 콜백파일 생성
예) plugin/keycloak/callback.php
//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>
!-->
답변을 작성하시기 전에 로그인 해주세요.