keycloak 그누보드 연동 문서가 있을까요? 채택완료

예전에 성공하셨다는 글을 본것 같은데 찾아보니 없네요 ㅜㅜ

답변 1개

채택된 답변
+20 포인트

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개

우와 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고