테스트 사이트 - 개발 중인 베타 버전입니다

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

라온헤윰 10개월 전 조회 1,553

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

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

답변 1개

채택된 답변
+20 포인트
포이치
10개월 전

Keycloak 설정 후

 

서버에 라이브러리 설치

composer require steverhoades/oauth2-keycloak

 

로그인 콜백파일 생성

예) plugin/keycloak/callback.php

 

</p>

<p>//callback.php 파일 내용</p>

<p> </p>

<p><?php</p>

<p>require_once __DIR__ . '/vendor/autoload.php';</p>

<p> </p>

<p>use League\OAuth2\Client\Provider\GenericProvider;</p>

<p> </p>

<p>$provider = new GenericProvider([</p>

<p>    'clientId'                => '<클라이언트아이디>',</p>

<p>    'clientSecret'            => '<클라이언트시크릿>',</p>

<p>    'redirectUri'             => '<a href="https://서버도메인/plugin/keycloak/callback.php'," target="_blank" rel="noopener noreferrer">https://서버도메인/plugin/keycloak/callback.php',</a></p>

<p>    'urlAuthorize'            => '<a href="https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/auth'," target="_blank" rel="noopener noreferrer">https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/auth',</a></p>

<p>    'urlAccessToken'          => '<a href="https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/token'," target="_blank" rel="noopener noreferrer">https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/token',</a></p>

<p>    'urlResourceOwnerDetails' => '<a href="https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/userinfo'" target="_blank" rel="noopener noreferrer">https://키클락서버/auth/realms/<생성한Realm>/protocol/openid-connect/userinfo'</a></p>

<p>]);</p>

<p>if (!isset($_GET['code'])) {</p>

<p>    $authorizationUrl = $provider->getAuthorizationUrl();</p>

<p>    header('Location: ' . $authorizationUrl);</p>

<p>    exit;</p>

<p>} else {</p>

<p>    try {</p>

<p>        // Access Token 요청</p>

<p>        $accessToken = $provider->getAccessToken('authorization_code', [</p>

<p>            'code' => $_GET['code']</p>

<p>        ]);</p>

<p> </p>

<p>        // 사용자 정보 가져오기</p>

<p>        $resourceOwner = $provider->getResourceOwner($accessToken);</p>

<p>        $user = $resourceOwner->toArray(); // Keycloak 사용자 정보 배열</p>

<p> </p>

<p>        // 사용자 정보 매핑</p>

<p>        $keycloak_id = $user['sub']; // Keycloak 고유 ID</p>

<p>        $username = $user['preferred_username'];</p>

<p>        $email = $user['email'];</p>

<p>        $name = $user['name'];</p>

<p> </p>

<p>        // 그누보드 DB에서 사용자 확인</p>

<p>        $sql = "SELECT COUNT(*) AS cnt FROM g5_member WHERE mb_id = '{$username}'";</p>

<p>        $result = sql_fetch($sql);</p>

<p> </p>

<p>        if ((int)$result['cnt'] === 0) {</p>

<p>            // 사용자 추가</p>

<p>            $insert_sql = "INSERT INTO g5_member (mb_id, mb_email, mb_name, mb_datetime, mb_ip) VALUES ('{$username}', '{$email}', '{$name}', NOW(), '{$_SERVER['REMOTE_ADDR']}')";</p>

<p>            sql_query($insert_sql);</p>

<p>        }</p>

<p> </p>

<p>        // 세션에 사용자 정보 저장</p>

<p>        $_SESSION['mb_id'] = $username;</p>

<p>        $_SESSION['mb_name'] = $name;</p>

<p>        $_SESSION['mb_email'] = $email;</p>

<p> </p>

<p>        // 그누보드 메인으로 리다이렉트</p>

<p>        header('Location: /');</p>

<p>        exit;</p>

<p>    } catch (\Exception $e) {</p>

<p>        echo 'Failed to authenticate: ' . $e->getMessage();</p>

<p>        exit;</p>

<p>    }</p>

<p>}</p>

<p>?></p>

<p>

 </p>

<p>//로그인 페이지에 키클락 로그인 버튼 추가하기</p>

<p><a href="<경로>/plugin/keycloak/callback.php">키클락 로그인</a></p>

<p>

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

라온헤윰
10개월 전
우와 감사합니다.

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

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

로그인