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

與 WordPress 整合以進行授權

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

Sijie
Sijie
Developer

在之前的文章中,我們討論了如何在 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 網站的角色和權限結構對其進行調整。