处理 PATCH 请求中不受支持的 SCIM 属性

Handling unsupported SCIM attributes in a PATCH request

我不确定当我的 API 收到对 add/update SCIM 用户属性的 PATCH 请求时应该如何响应,而用户模型不支持该属性。

假设我的用户模型没有“title”属性,但身份提供者 (Azure AD) 有它的映射。在预配期间,Azure 发送 PATCH 请求以执行 SCIM 添加操作以设置“title”属性。在这种情况下我的 API 应该如何应对?

我已经浏览了 SCIM Protocol Spec (RFC-7644) and SCIM Core Schema (RFC-7643),但答案对我来说不是很清楚。我认为有可能有效的三个选项:

  1. 忽略该操作并return 200 响应(假设没有其他问题)
  2. Return 400 响应 scimType = "invalidPath"
  3. Return scimType = "noTarget"
  4. 的 400 响应
协议规范的

Section 3.12 包含有关错误处理的信息,包括 400 响应的 scimType 定义。

invalidPath 的描述如下:

The "path" attribute was invalid or malformed (See Figure 7).

noTarget 的描述如下:

The specified "path" did not yield an attribute or attribute value that could be operated on. This occurs when the specified "path" value contains a filter that yields no match.

noTarget 似乎非常接近正确的响应,但第二句话(以及规范中的其他描述)让我认为它仅适用于复杂的属性类型。 invalidPath 似乎不是最佳选择,因为根据 SCIM 规范,“标题”是用户的有效属性。我的应用程序不支持它。

更新 (08/28/2020): 如果操作没有其他问题,我决定忽略该属性和 return 200。 Azure AD 配置将发送请求,看到成功,然后忽略它,直到发生变化。我最初担心 Azure 会不断重新发送更新操作,直到值出现在 User 上,但事实并非如此。

对于规范中的内容,我仍然没有答案,但它有效。还有其他操作,我觉得我 return 根据规范编辑了正确的错误,但 Azure 会反复重新发送错误的请求。

正如您正确声明的那样,如果存在到未知属性的(配置错误的)映射,则可以默默地忽略它。返回错误将 kick-in 重试,直到配置完全中止。没有强制执行,客户端会仔细检查请求的更改是否实际显示在响应中。规范指出 204 也可以。

我们也可以在场景中,属性确实存在,但暂时是只读的。最终,由于对象状态的改变,它可能变得可写。以难以重现的错误返回该事实将导致在映射中进行不必要的修复尝试。

将其视为 End-User 试图变得聪明并修改有效负载中的某些值,UI 没有提供任何更改选项。把那个扔掉。