跳到主要内容

为您的 WordPress 应用添加认证 (Authentication)

本教程将向你展示如何将 Logto 集成到你的 Wordpress 网站中。

前提条件​

集成​

安装插件​

我们将使用 OpenID Connect Generic 插件,通过 OIDC 协议将 Logto 集成到你的 Wordpress 网站。

  1. 登录到你的 WordPress 站点。
  2. 导航到“插件”并点击“添加新插件”。
  3. 搜索“OpenID Connect Generic”并安装 daggerhart 的插件。
  4. 激活插件。

配置重定向 URI​

首先,让我们配置重定向 URI。你可以在插件设置中找到它,向下滚动到“Notes”部分,并复制“Redirect URI”值。

切换到 Logto 控制台的应用详情页面。添加一个重定向 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 应用的用户信息端点 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 KeyID 令牌中包含用户身份的唯一键,可以是 email 或 sub,具体取决于你的配置。
Nickname KeyID 令牌中包含用户昵称的键,你可以将其设置为 sub 并在以后更改。

检查点:测试你的应用​

现在,你可以测试你的应用:

  1. 登出你的 WordPress 站点。
  2. 访问 WordPress 登录页面并点击“使用 Logto 登录”按钮。
  3. 你将被重定向到 Logto 登录页面。
  4. 使用你的 Logto 账户登录。
  5. 你将被重定向回 WordPress 站点并自动登录。

角色 (Roles) 映射​

WordPress 有一个内置的用户角色 (Role) 管理系统,用于定义用户在站点上可以执行的操作(能力)。默认的用户角色包括管理员、编辑、作者、贡献者和订阅者,每个角色都有自己的一组能力。

Logto 使用基于角色的访问控制 (RBAC) 作为其授权 (Authorization) 模型,利用“权限 (Scopes)”作为权限的最小单位。这些权限定义了经过认证 (Authentication) 的用户在应用中允许执行的特定操作。然而,WordPress 在管理用户权限方面采用了不同的原则,依赖于预定义的“角色 (Roles)”,这些角色将各种能力捆绑在一起。

鉴于这种根本性的差异,我们建议在 Logto 中创建与 WordPress 中定义的角色相对应的特殊角色。这些角色可能没有任何权限 (Scopes),它们仅用作将用户映射到 WordPress 角色的参考。

前提条件​

  • 在 Logto 中设置与 WordPress 中角色对应的角色。例如,如果你在 WordPress 中有一个“编辑”角色,请在 Logto 中创建一个“group:editors”角色。

实现角色映射​

要实现角色映射,我们将在 WordPress 主题的 functions.php 文件中添加自定义代码。这涉及使用 wp_login 动作钩子,该钩子在用户登录时触发。以下是如何设置的分步指南:

步骤 1:访问你的主题的 functions.php​

打开你的主题的 functions.php 文件。你可以通过导航到外观 > 主题编辑器并从右侧文件列表中选择 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 中检索存储在用户元数据中的角色 (Roles) 作为 openid-connect-generic-last-user-claim,将此角色映射到相应的 WordPress 角色,并将其分配给用户。

  • add_action:此行将 logto_handler 函数挂钩到 wp_login 动作,该动作在用户登录后触发。10 是优先级(默认),2 表示函数接受的参数数量。

上面的示例将“编辑”角色分配给通过 Logto 认证 (Authentication) 的角色名称为 group:editors 的用户。然而,在实际场景中,你可能需要实现更多种类的角色映射。

你可以在 这里 找到 WordPress 角色及其能力的列表。

步骤 4:测试你的设置​

现在,让我们通过使用在 Logto 中具有 group:editors 角色的用户登录来测试角色映射功能。登录后,检查用户在 WordPress 中的角色,以确保映射正常工作。

进一步阅读​

终端用户流程:认证流程、账户流程和组织流程 配置连接器 保护你的 API