首頁  >  文章  >  後端開發  >  使用 Keycloak 實作 PHP 安全驗證

使用 Keycloak 實作 PHP 安全驗證

王林
王林原創
2023-07-26 22:45:201786瀏覽

使用 Keycloak 實作 PHP 安全驗證

引言:
隨著 Web 應用程式的發展和多樣化,保護使用者資料和身分的安全已經變得至關重要。為了實現安全驗證,我們經常需要實作基於 OAuth、OpenID Connect 等標準的身份驗證和授權方案。 Keycloak 是一個開源的身份和存取管理解決方案,提供了統一的認證和授權服務。本文將介紹如何使用 Keycloak 實作基於 PHP 的安全驗證,並提供對應的程式碼範例。

一、搭建 Keycloak 伺服器
首先,我們需要在伺服器上搭建 Keycloak。可以透過 Keycloak 的官方網站(https://www.keycloak.org/)下載對應的安裝包,並按照官方文件的步驟進行安裝和設定。

二、建立 Keycloak 用戶端
在 Keycloak 管理介面上,建立一個新的 Realm (領域),然後在該 Realm 下建立一個新的客戶端(Client)。在客戶端設定中,配置正確的重定向 URI 和有效的客戶端憑證,同時也可以配置其他相關選項。

三、安裝 OAuth 用戶端程式庫
為了在 PHP 專案中使用 Keycloak 的認證和授權機制,我們可以使用一些第三方的 OAuth 用戶端程式庫。在本文中,我們將使用 "OAuth 2.0 Client" 這個開源函式庫(https://github.com/thephpleague/oauth2-client)。

首先,使用 Composer 安裝程式庫:

composer require league/oauth2-client

安裝完成後,我們可以開始寫 PHP 程式碼。

四、PHP 程式碼範例
在 PHP 程式碼中,我們需要透過 Keycloak 的客戶端憑證和重定向 URI 進行設定。然後,我們可以透過取得 Keycloak 的授權碼(authorization code)、令牌(token)和使用者資訊來實現身分認證和授權驗證。

// 引入 OAuth 2.0 Client 库
require_once('vendor/autoload.php');

use LeagueOAuth2ClientProviderKeycloak;

// Keycloak 客户端凭证和重定向 URI
$clientId = 'YOUR_CLIENT_ID';
$clientSecret = 'YOUR_CLIENT_SECRET';
$redirectUri = 'http://localhost/callback.php';

// 创建 Keycloak 提供程序
$provider = new Keycloak([
    'authServerUrl' => 'http://localhost:8080/auth',
    'realm' => 'YOUR_REALM',
    'clientId' => $clientId,
    'clientSecret' => $clientSecret,
    'redirectUri' => $redirectUri
]);

// 获取授权码
if (!isset($_GET['code'])) {
    $authUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: ' . $authUrl);
    exit;
}

// 验证授权码
if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
    unset($_SESSION['oauth2state']);
    exit('Invalid state');
}

// 授权码授权
$token = $provider->getAccessToken('authorization_code', [
    'code' => $_GET['code']
]);

// 使用令牌获取用户信息
$user = $provider->getResourceOwner($token);

// 打印用户信息
echo 'Logged in as ' . $user->getName();

// 使用令牌调用 Keycloak API
$response = $provider->getHttpClient()->get(
    'http://localhost:8080/auth/realms/YOUR_REALM/protocol/openid-connect/userinfo',
    [
        'headers' => [
            'Authorization' => 'Bearer ' . $token->getToken()
        ]
    ]
);
$data = json_decode($response->getBody(), true);

// 打印用户信息
print_r($data);

程式碼說明:

  • 首先,我們引進 OAuth 2.0 Client 函式庫,並建立 Keycloak 提供者。
  • 然後,我們判斷是否取得了授權碼,如果沒有就重定向到 Keycloak 的認證頁面。
  • 授權碼取得後,我們校驗授權碼的合法性,並透過授權碼取得令牌。
  • 使用令牌取得使用者資訊並進行對應操作。

五、總結
使用 Keycloak 實作 PHP 安全驗證是一種安全、可靠的方式。透過配置 Keycloak 用戶端,並結合 OAuth 2.0 Client 函式庫,我們可以輕鬆實現基於 Keycloak 的身份認證和授權驗證。

以上是一個基本的範例,您可以根據自己的需求進行相應的擴展和客製化。希望本文對您理解 Keycloak 和 PHP 安全驗證有所幫助。

參考連結:

  • Keycloak 官方網站:https://www.keycloak.org/
  • OAuth 2.0 Client 開源函式庫:https://github. com/thephpleague/oauth2-client

以上是使用 Keycloak 實作 PHP 安全驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn