【发布时间】:2020-07-27 22:31:38
【问题描述】:
我正在尝试在我们的平台中实现一项功能,该功能将使用 ObjectID 执行 Graph API 查找,以检索有关身份的一些附加信息,例如显示名称。这对于本地帐户身份有效且简单,但对于联合身份则不适用。当联合用户使用自定义 SAML 集成登录到我们的应用程序时,我们会将他们的 ObjectID 存储在我们的数据库中,以便我们以后可以发出这些类型的请求。但是,当发出这样的请求时,对于联合身份的用户,不会返回任何结果。
在研究这个问题时,我在这篇堆栈溢出帖子 (AAD B2C adding / mapping claims from external / delegate Identity Provider?) 上看到了一条评论,其中指出 “对于每个外部身份,Azure AD B2C 在其自己的目录中创建一个用户对象,以便您可以存储外部 IdP 声明的声明以及最终用户或您自己的应用程序声明的声明。” 这对我来说很有意义,我可以通过 Azure 门户在我们的开发环境中自己验证它。更具体地说,以下是我在使用联合 AAD 用户登录时可以观察到的情况:
- 通过 ID 令牌传递给我们系统的 ObjectID 是 3d116a96-e9d6-4f12-8185-907f327dd522。此值是我的用户在 AAD 目录中的对象 ID,而不是 B2C 目录 - 它源自 AAD IdP 中的 user.objectid 字段,在该字段中映射到 uid SAML 声明,然后映射回 B2C ObjectID 声明SAML 技术配置文件。
- 当我为具有该 ObjectID 的用户进行图形 API 查询时,我没有得到任何结果。考虑到前一点,这是有道理的。
- 当我查看 Azure 门户中的 B2C 用户刀片时,我可以过滤到“外部”用户并找到我自己的用户。每当我使用 AAD IdP 登录我们的平台时,该用户都会登录,因此我知道这是正确的外部用户条目。但是,此用户的 ObjectID 为 a51ee747-bd73-481f-ac84-fce8cacd3309。
- 当我为该用户进行 Graph API 查询时,我确实得到了结果。我什至可以在其上存储扩展属性,然后也可以检索该属性。
在我看来,这里的关键是将第二个 ObjectID 存储在我们的数据库中,而不是第一个,以便以后可以使用它来为存储在该身份上的自定义属性发出 Graph API 请求.问题是我不知道如何在我们的自定义策略中访问或引用第二个 ObjectID。
任何建议将不胜感激。
更新
下面 Rohit Prasad 的回答让我走上了正确的道路,我最终找到了 B2C account linking sample,这非常有帮助,而且我能够适应我自己的情况。发现此问题的任何其他人都应该知道,在我撰写本文时,该示例已略微过时 - 请参阅 this issue 了解更多信息。
【问题讨论】:
标签: microsoft-graph-api azure-ad-b2c