logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

使用外部身份提供者进行 REST API 身份验证

02/09/2025, by Ivan

如果你希望使用身份提供者来保护/限制对 Drupal REST API 的访问,那么应该使用外部身份提供者身份验证方法。

使用外部身份提供者进行 Drupal API 身份验证的方式,是通过第三方提供者(如 Google、Azure AD、Keycloak、Okta、Gitlab 等)获取的访问令牌来安全访问 Drupal 的 REST API。

在这种方法中,你需要在模块配置中设置身份提供者的 User Info Endpoint 和用户名属性。之后,你就可以使用该提供者颁发的令牌对所有 Drupal API 请求进行认证。Drupal REST API 模块会将接收到的用户凭据与 Drupal 用户账户进行匹配验证。该模块兼容 Drupal 7、8、9、10 和 11。

点击下载

设置视频:

前置条件:下载与安装

  • 下载并安装 Drupal REST & JSON API Authentication 模块
  • REST UI 模块:为 REST 模块提供图形界面配置方式
  • 在扩展页面(/admin/modules)启用以下 Web Services 模块:
    • REST UI
    • RESTful Web Services
    • Serialization
    install modules

使用外部身份提供者配置 API 身份验证步骤:

  • 为便于理解,这里以向 Drupal 的 Create User API 添加基于外部身份提供者的身份验证为例。
  • 请注意,Drupal 的 /entity/user API 用于创建新用户。

启用 API 并分配方法与操作:

  • 第一步是启用目标 API,并为其分配允许的方法和操作。这可以通过 REST UI 模块完成,也可以直接修改配置。
  • 使用 REST UI 模块启用 API 时,点击模块旁的 Configure 按钮:
    REST UI
  • 在本例中,我们需启用 /entity/user API。点击对应的 Enable 按钮启用它:
    Add node
  • 接下来,为创建用户选择以下配置:
    • 方法:POST
    • 格式:json
    • 身份验证提供者:rest_api_authentication
  • 选择 rest_api_authentication 后,miniOrange 模块将处理 API 身份验证。点击 Save Configuration 保存设置:
    Resource content

Drupal REST API Authentication 模块配置:

  • 本步骤设置 外部身份提供者 作为 API 身份验证方式。前往模块配置页面:
    /admin/config/people/rest_api_authentication/auth_settings
    • 勾选 Enable Authentication,点击 Save Settings
    • 在保存按钮下方,选择 External Identity Provider 单选项
    • 在 User Info Endpoint 字段中填写身份提供者的用户信息接口 URL
    • 在 Username Attribute 字段中填写身份提供者返回用户名的属性名
      External authentication

赋予 Drupal 角色创建用户的权限:

  • 如有需要,你可以为非管理员角色赋予创建用户的权限。路径为:/admin/people/permissions,并启用 Administer users 权限:
    Add permissions

完成啦!!!

  • 现在我们可以尝试使用外部身份提供者令牌,通过 API 请求在 Drupal 中创建用户。

示例:

  • 要在 Drupal 中创建用户,你需要发送一个 POST 请求,并附上从身份提供者获取的访问令牌。

    请求地址: POST  <your_drupal_base_url>/entity/user?_format=json
    请求头:
    Token: <外部身份提供者返回的访问令牌>
    Accept: application/json
    Content-Type: application/json

    请求体:

    {
      "name": [
        {"value": "<用户名>"}
      ],
      "mail": [
        {"value": "<邮箱>"}
      ],
      "pass": [
        {"value": "<密码>"}
      ],
      "status": [
        {"value": "1"}
      ]
    }

    CURL 命令格式:

    curl --location --request POST '<your_drupal_base_url>/entity/user?_format=json' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header 'Token: <外部身份提供者返回的访问令牌>' \
    --data-raw '{
      "name": [{"value": "Username"}],
      "mail": [{"value": "email"}],
      "pass": [{"value": "Password"}],
      "status": [{"value": "1"}]
    }'
  • 你也可以参考以下 Postman 请求示例:
    postman
  • 成功响应后,返回所创建用户的信息,如下图所示:
    Postman response
  • 若响应返回错误,请参考下方错误描述与解决方法:

错误响应说明:

错误 描述
INVALID_USER_INFO_ENDPOINT 提供的 User Info Endpoint URL 有误。
INVALID_USERNAME_ATTRIBUTE 提供的用户名属性字段有误,或无法从身份提供者响应中提取用户名。
INVALID_TOKEN 请求中未包含访问令牌,或提供的令牌无效。

文章来源:Drupal 官方文档