為你的 WordPress 應用程式新增驗證 (Authentication)
本教程將向你展示如何將 Logto 整合到你的 WordPress 網站中。
先決條件
- 一個 Logto Cloud 帳戶或 自行託管的 Logto。
- 已建立的 Logto 傳統應用程式。
- 一個 WordPress 專案:在繼續之前,請按照官方 WordPress 安裝指南 設置你的 WordPress 網站。
整合
安裝插件
我們將使用 OpenID Connect Generic 插件,通過 OIDC 協議將 Logto 整合到你的 WordPress 網站中。
- 登入你的 WordPress 網站。
- 導航到「插件」並點擊「新增」。
- 搜索「OpenID Connect Generic」,並安裝 daggerhart 的插件。
- 啟用插件。
配置重定向 URI
首先,讓我們配置重定向 URI。你可以在插件設置中找到它,向下滾動到「Notes」部分,並複製「Redirect URI」值。
切換到 Logto Console 的應用程式詳細資訊頁面。新增一個重定向 URI,然後點擊「儲存變更」。
設定插件
請參考下表進行必要的配置:
插件欄位 | 描述 |
---|---|
Client ID | 你的 Logto 應用程式的 app ID |
Client Secret | 你的 Logto 應用程式的 app secret |
OpenID Scope | 輸入 email profile openid offline_access |
Login Endpoint URL | 你的 Logto 應用程式的授權端點 URL,格式為 https://[tenant-id].logto.app/oidc/auth,你可以在 Logto 應用程式頁面中點擊「顯示端點詳細資訊」來獲取 URL。 |
Userinfo Endpoint URL | 你的 Logto 應用程式的 userinfo 端點 URL,格式為 https://[tenant-id].logto.app/oidc/me。 |
Token Validation Endpoint URL | 你的 Logto 應用程式的權杖驗證端點 URL,格式為 https://[tenant-id].logto.app/oidc/token。 |
End Session Endpoint URL | 你的 Logto 應用程式的結束會話端點 URL,格式為 https://[tenant-id].logto.app/oidc/session/end。 |
Identity Key | 在 ID 權杖中包含使用者身分的唯一鍵,可以是 email 或 sub,具體取決於你的配置。 |
Nickname Key | 在 ID 權杖中包含使用者暱稱的鍵,你可以將其設置為 sub,並在之後更改。 |
檢查點:測試你的應用程式
現在,你可以測試你的應用程式:
- 登出你的 WordPress 網站。
- 訪問 WordPress 登入頁面,然後點擊「使用 Logto 登入」按鈕。
- 你將被重定向到 Logto 登入頁面。
- 使用你的 Logto 帳戶登入。
- 你將被重定向回 WordPress 網站並自動登入。
角色 (Roles) 映射
WordPress 具有內建的使用者角色管理系統,定義了使用者在網站上可以執行的操作(功能)。預設的使用者角色包括管理員、編輯、作者、貢獻者和訂閱者,每個角色都有其自己的功能集。
Logto 採用基於角色的存取控制 (RBAC, Role-Based Access Control) 作為其授權模型,使用「權限範圍 (Scopes)」作為最小的權限單位。這些權限範圍定義了已驗證使用者在應用程式中允許執行的具體操作。然而,WordPress 在管理使用者權限時依賴於預定義的「角色」,這些角色將各種功能捆綁在一起。
鑑於這一基本差異,我們建議在 Logto 中創建與 WordPress 中定義的角色相對應的特殊角色。這些角色可能不具有任何權限範圍,它們僅用作將使用者映射到 WordPress 角色的參考。
先決條件
- 在 Logto 中設置與 WordPress 中角色相對應的角色。例如,如果你在 WordPress 中有一個「editor」角色,則在 Logto 中創建一個「group:editors」角色。
實施角色映射
要實施角色映射,我們將在 WordPress 主題的 functions.php
文件中添加自定義代碼。這涉及使用 wp_login
動作鉤子,該鉤子在使用者登入時觸發。以下是設置此功能的分步指南:
步驟 1:訪問主題的 functions.php
打開你的主題的 functions.php
文件。你可以通過 WordPress 管理面板訪問此文件,導航到外觀 > 主題編輯器,然後從右側文件列表中選擇 functions.php
。或者在源代碼中,導航到你的 WordPress 主題目錄並找到 functions.php
文件。此文件允許你添加自定義 PHP 函數,以擴展你的 WordPress 網站的功能。
步驟 2:編寫角色映射函數
以下是一個簡單的函數示例,你可以將其添加到 functions.php 中。此函數將在使用者登入時觸發,並根據從 Logto 獲取的使用者 roles
宣告分配角色。
function logto_handler($user_login, $user = null) {
if (!$user) {
$user = get_user_by('login', $user_login);
}
$oidc_claims = get_user_meta($user->ID, 'openid-connect-generic-last-user-claim', true);
if (in_array('group:editors', $oidc_claims['roles'])) {
$user->set_role('editor');
} else {
$user->set_role('subscriber');
}
}
add_action('wp_login', 'logto_handler', 10, 2);
步驟 3:理解代碼並自定義
-
logto_handler
函數:此函數接受兩個參數:$user_login
(使用者名稱)和$user
(使用者對象)。它從 Logto 中檢索存儲在使用者元數據中的角色openid-connect-generic-last-user-claim
,將此角色映射到相應的 WordPress 角色,並將其分配給使用者。 -
add_action
:此行將logto_handler
函數掛鉤到wp_login
動作,該動作在使用者登入後觸發。10
是優先級(默認),2
表示函數接受的參數數量。
上述示例將 group:editors
角色的使用者分配為經由 Logto 驗證的「editor」角色。然而,在實際應用中,你可能需要實現更多種類的角色映射。
你可以在 這裡 找到 WordPress 角色及其功能的列表。
步驟 4:測試你的設置
現在,讓我們通過使用在 Logto 中具有 group:editors
角色的使用者登入來測試角色映射功能。登入後,檢查使用者在 WordPress 中的角色,以確保映射正常工作。