keycloak 그누보드 연동 문서가 있을까요?

keycloak 그누보드 연동 문서가 있을까요?

QA

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>

 

답변을 작성하시기 전에 로그인 해주세요.
전체 127,448 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT