问题描述
我正在将 AzureAD 与 SCIM 端点集成。到目前为止,集成似乎有效:AzureAD 发送“POST”请求来创建用户,然后它使用他们的“id”查询/更新用户。
来自 SCIM 标准 (RFC 7643) 的提醒:'id' 是
服务提供商定义的 SCIM 资源的唯一标识符
我的 SCIM 端点在用户首次创建时生成此唯一 ID。根据标准的要求,它在回复中将此 ID 发送到 AzureAD。我知道 AzureAD 将 ID 存储在某处,因为它会在后续请求中使用它。
我的问题:此 ID 存储在 AzureAD 中的何处?我需要阅读它,以便我可以将其转发到其他地方。使用 Graph Explorer 我尝试了很多属性:
https://graph.microsoft.com/v1.0/me?$select=id,userPrincipalName,extensions,employeeId,externalUserState,identities,externalId
但它们都不起作用。它们为空或不包含 SCIM id。
有谁知道该物业是否公开可用?
解决方法
您并不认为 AAD 会从 SCIM 中保存用户 ID。
您可以使用 Provision on demand 来了解它的工作原理。
简单步骤:
在 SCIM 企业应用中点击“Provision on demand”。
然后选择一个 AAD 用户并点击“Provision”。
执行成功后,可以看到如下内容:
导入用户正在从 Azure Active Directory 检索用户。
确定用户是否在范围内是通过对每个范围过滤器进行评估来确定用户是否在范围内。
在源系统和目标系统之间匹配用户是从 SCIM 检索用户并将其与步骤 1 中的 AAD 用户匹配。这是您不知道的要点前。 AAD 将在此步骤中Get User by query。
GET /Users?filter=userName eq "{userName}"
然后将返回来自 SCIM 的用户 ID(如上图所示)。
执行操作使用步骤 3 中的 ID 更新 SCIM 中的用户。
所以 AAD 不存储来自 SCIM 的 id。它首先在 SCIM 中查询用户以获取 id,然后使用此 id 向 SCIM 端点发送更新请求。
,Azure AD Provisioning 有一个内部数据存储,不会通过任何存储该数据的外部/面向客户的 API 公开。如果服务正在评估一个它不知道 SCIM ID 值的对象,它将尝试使用过滤的 GET 来定位该对象,例如 GET /Users?filter=userName eq "[email protected]",但一旦它定位该服务将在内部存储一条记录,说明 Azure AD 中 objectId 值为 123 的对象 X 与 ID 值为 456 的对象 Y 匹配。
要明确回答“我需要在 Azure AD 中找到此值并将其转发到其他地方”的最终目标 - 这是不可能的。