滚动
使用外部身份提供者进行 REST API 身份验证
如果你希望使用身份提供者来保护/限制对 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
使用外部身份提供者配置 API 身份验证步骤:
- 为便于理解,这里以向 Drupal 的 Create User API 添加基于外部身份提供者的身份验证为例。
- 请注意,Drupal 的 /entity/user API 用于创建新用户。
启用 API 并分配方法与操作:
- 第一步是启用目标 API,并为其分配允许的方法和操作。这可以通过 REST UI 模块完成,也可以直接修改配置。
- 使用 REST UI 模块启用 API 时,点击模块旁的 Configure 按钮:
- 在本例中,我们需启用 /entity/user API。点击对应的 Enable 按钮启用它:
- 接下来,为创建用户选择以下配置:
- 方法:POST
- 格式:json
- 身份验证提供者:rest_api_authentication
- 选择 rest_api_authentication 后,miniOrange 模块将处理 API 身份验证。点击 Save Configuration 保存设置:
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 字段中填写身份提供者返回用户名的属性名
赋予 Drupal 角色创建用户的权限:
- 如有需要,你可以为非管理员角色赋予创建用户的权限。路径为:/admin/people/permissions,并启用 Administer users 权限:
完成啦!!!
- 现在我们可以尝试使用外部身份提供者令牌,通过 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 请求示例:
- 成功响应后,返回所创建用户的信息,如下图所示:
- 若响应返回错误,请参考下方错误描述与解决方法:
错误响应说明:
错误 | 描述 |
INVALID_USER_INFO_ENDPOINT | 提供的 User Info Endpoint URL 有误。 |
INVALID_USERNAME_ATTRIBUTE | 提供的用户名属性字段有误,或无法从身份提供者响应中提取用户名。 |
INVALID_TOKEN | 请求中未包含访问令牌,或提供的令牌无效。 |
文章来源:Drupal 官方文档