AD 配置说 "A required attribute is missing from a response",但它确实存在于响应中

AD provisioning says that "A required attribute is missing from a response", but it does exist in the response

我正在努力实现 SCIM 2.0,因为我需要使用它来预配我系统中存储在 Azure AD 中的用户。我已经设置好了,当我尝试手动配置用户时,出现此错误:

用户已在客户端成功配置,您可能会从错误消息中猜到 - 这不是请求的问题。

我猜测问题出在 标识符所在的位置,因为 Identifier 属性包含在错误消息的响应中。

我用谷歌搜索了这个错误,我可以找到 AD SCIM 实现的一般教程,但我还没有找到关于这个特定错误的任何信息。

这是打印精美的回复版本:

{
  "totalResults": 1,
  "startIndex": 0,
  "itemsPerPage": 1,
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:ListResponse"
  ],
  "Resources": [
    {
      "emails": [
        {
          "type": "work",
          "value": "perrin@***.com",
          "primary": true
        }
      ],
      "Identifier": "1072",
      "meta": {
        "meta": "/scim/v2/Users/1072",
        "resourceType": "User"
      },
      "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
      ],
      "name": {
        "familyName": "Aybara",
        "givenName": "Perrin"
      },
      "active": true,
      "id": "1072",
      "userName": "perrin@***.com"
    }
  ]
} 

• 当您通过 Azure AD 的 SCIM 功能手动配置用户时,发行者身份(即 Azure AD)由从 Azure AD 成功配置用户后收到的令牌中的 iss 声明标识。举例如下:-

"iss":https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/  

其中“https://sts.windows.net”是发行者的 URL,即 Azure AD,“cbb1a5ac-f33b-45fa-9bf5-f37db0fed422”是唯一标识符为其颁发的 Azure AD 租户。此令牌是为配置为在企业应用程序中配置的应用程序的应用程序模板 ID 颁发的。

• 此外,请注意,使用与用户的“mailNickname”属性值匹配的“externalId”属性值在客户端应用程序 Web 服务中使用“创建”操作来配置 Azure AD 用户的查询不会't return 您案例中的任何用户,如图所示,然后 AAD 请求 Web 服务提供与 AAD 中的用户相对应的用户。当供应成功时,从 Azure AD 供应的用户将被分配一个标识符值,并且 return 是 Microsoft.SCIM.Core2EnterpriseUser class 的一个实例,其标识符属性指示用户供应。因此,如图所示,由于缺少用户标识符值,请运行以下命令查询用户是否创建成功。

‘ GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
 Authorization: Bearer ... ’

在检索用户当前状态的请求中,作为参数参数值提供的对象的属性值如下:

  Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
  SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

• 请求您再次尝试提供用户和查询以请求用户关于其引用属性的当前状态。此外,从 Azure AD 向 SCIM 服务发送请求以更新其数据存储中的用户。以下是从 Azure AD 发送到 SCIM 服务的请求示例:-

  ‘ PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
    Authorization: Bearer ...
    Content-type: application/scim+json
   {
       "schemas": 
   [
  "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":
[
  {
    "op":"Add",
    "path":"manager",
    "value":
      [
        {
          "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
          "value":"2819c223-7f76-453a-919d-413861904646"}]}]} ‘

请在link中找到详细步骤如下:-

https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups#handling-provisioning-and-deprovisioning-of-users

当 JSON 有效负载的格式无效时,通常会出现此错误。从这个来看,我怀疑这是你包含的“标识符”,因为它没有在核心 SCIM 架构文档中定义,如果它与配置服务中的其他内容重叠,特别是可能会导致问题。 “id”是要使用的正确属性。

在试用它之后,问题不在于资源缺少任何东西——而是 ListResponse 本身需要一个 ID。如果我包括

"id": "urn:ietf:params:scim:api:messages:2.0:ListResponse"

到顶级对象(以及 totalResults 等)它按预期处理。