繁體中文(台灣)
  • oidc
  • wordpress

與 WordPress 整合以進行授權

這是將 Logto 與 WordPress 整合的系列文章的第二部分,專注於授權。

Sijie
Sijie
Developer

不要在使用者認證上浪費數週時間
使用 Logto 更快地發布安全應用程式。幾分鐘內整合使用者認證,專注於您的核心產品。
立即開始
Product screenshot

在之前的文章中,我們討論了如何在 WordPress 中整合 Logto 進行身份驗證。作為第二部分,這篇文章將深入探討授權過程,重點介紹 WordPress 中的角色系統以及如何與 Logto 實現角色映射,因為我們在上一篇文章中使用的插件並未直接提供授權功能。

我們將創建一個角色映射功能,根據 Logto RBAC(基於角色的訪問控制)提供的角色,自動為用戶分配 WordPress 角色。

理解 WordPress 用戶角色

WordPress 有內建的用戶角色管理系統,定義了用戶在網站上可以執行的操作(功能)。默認的用戶角色包括管理員、編輯、作者、貢獻者和訂閱者,每個角色都有其自己的功能集。

這些角色對於維護網站運行的安全性和效率非常重要,因為它們有助於確保用戶擁有適合他們職責的訪問級別。

解決方案:自定義角色映射

Logto 採用基於角色的訪問控制(RBAC)作為其授權模型,利用“範圍”作為最小的許可單位。這些範圍定義了認證用戶在應用程式中允許執行的特定操作。然而,WordPress 依靠預定義的“角色”管理用戶權限,將各種功能捆綁在一起運作原理有所不同。

鑑於這一基本差異,我們建議在 Logto 中創建與 WordPress 中定義的角色相對應的特殊角色。這些角色可能不具有任何範圍,它們僅用作將用戶映射到 WordPress 角色的參考。

先決條件

在繼續之前,請確保你擁有以下內容:

  • 完成上一篇文章,將 Logto 與 WordPress 整合進行身份驗證,包括:
    • 具有管理員訪問權限的 WordPress 網站。
    • 設置用於 WordPress 網站的 Logto 帳戶。
    • 在 WordPress 網站上安裝並配置 OpenID Connect Generic 插件
  • 在 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 聲明分配角色。

步驟 3:理解代碼並自定義它

  • logto_handler 函數:此函數接受兩個參數:$user_login(用戶名)和 $user(用戶對象)。它從儲存在 user meta 中的 openid-connect-generic-last-user-claim 中檢索 Logto 的角色,將該角色映射到相應的 WordPress 角色,並分配給用戶。

  • add_action:此行將 logto_handler 函數掛接到 wp_login 操作,此操作在用戶登錄後觸發。10 是優先級(默認),2 表示該函數接受的參數數量。

上述示例為通過 Logto 验證的用戶(角色名稱為 group:editors)分配“editor”角色。然而,在實際情況中,你可能需要實施更多種類的角色映射。

你可以在這裡找到 WordPress 角色及其功能的列表。

步驟 4:測試你的設置

現在,讓我們通過使用在 Logto 中具有 group:editors 角色的用戶進行登錄來測試角色映射功能。登錄後,檢查用戶在 WordPress 中的角色,以確保映射運行正常。

結論

通過將 Logto 與 WordPress 整合進行身份驗證和授權,你可以增強站點的安全性和功能。請記住,儘管此處提供的代碼是一個基本示例,你可能需要根據 WordPress 網站的角色和權限結構對其進行調整。