답변 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개월 전
우와 감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인