无法重置通过 Graph 创建的 B2C 帐户密码 API

Can't reset B2C account password create via the Graph API

希望有人能对以下问题有所了解;

我得到了一个 Angular & .Net 核心 Web API 应用程序,它使用 Azure B2C 对用户进行身份验证。 用户帐户由用户自己通过 signin/signup 自定义策略创建,或者管理员可以使用图表 API 通过应用程序创建帐户。

由于要求,应用程序使用用户名(而不是电子邮件地址)登录应用程序。到目前为止,除了以下情况外,我已经设法让一切正常工作:

当通过 Graph API 创建帐户时,该帐户的所有者无法重置该帐户的密码。错误是 "An account could not be found for the provided user ID".

对于通过自定义注册策略创建的帐户,情况并非如此,因此我进行了一些比较,发现对于那些通过图表 API 创建的帐户,缺少电子邮件(可以在用户 -> 身份验证方法下找到)。我查看了填充该字段,但 "Mail" 属性似乎是 'read only'(不确定这是否是正确的属性)。

目前我必须通过 Azure 手动设置电子邮件,以便这些帐户的密码可以在必要时由其所有者重置。这显然不理想,想看看是否有人可能已经解决了这个问题,或者至少确认这确实是图表的限制 API.

在此先感谢您的帮助

Mail属性与Authentication Methods下的Email不同,目前没有这样的图api设置Authentication Methods下的Email值.

顺便说一句,用户无需为用户创建 Azure AD B2C 用户,因为用户可以自行注册。

问题如您所见,注册政策使用 strongAuthEmail 属性为基于用户名的帐户存储经过验证的电子邮件。密码重置策略将使用它来验证用户拥有用户名。使用图 api 创建用户时,不能填充此字段,它不会公开。唯一的选择是使用将此安全电子邮件存储在扩展属性中的自定义策略,然后您的图表 api 创建的用户也可以将相同的属性作为目标以允许星星对齐。

因此,我设法使用 Jas Suri 概述的方法实现了这一点。这些是我经历的步骤

  1. 在我的 B2C 租户中创建了一个自定义属性来保存帐户电子邮件地址
  2. 包括自定义属性声明类型 (extension_emailAddress) 以及 TrustFrameworkBase.xml
  3. 中的 strongAuthenticationEmailAddress
  4. 更新了我的应用程序的自定义策略以包含本地帐户发现的技术配置文件。我基本上只是从 here
  5. 中复制了必要的点点滴滴
  6. 更新了本地帐户发现以与 extenstion_emailAddres 而不是 strongAuthenticationEmailAddress 进行比较。
  7. 向注册用户旅程添加了一个额外的步骤,以便将 strongAuthenticationEmailAddress 中的值复制到 extension_emailAddress
  8. 更新了我的 Web API / Graph API "create user" 函数,以便它设置 extension_appidguid_emailAddress

就是这样。现在无论帐户如何创建都无关紧要,电子邮件地址将存储在扩展属性中,密码重置将能够使用该属性找到帐户。

如果有人遇到此问题,我们很乐意提供更多详细信息。