azure-ad-b2c - 无法通过 Graph API 重置 B2C 帐户密码创建
问题描述
希望有人可以对以下问题有所了解;
我有一个使用 Azure B2C 对用户进行身份验证的 Angular 和 .Net 核心 Web API 应用程序。用户帐户由用户自己通过登录/注册自定义策略创建,或者管理员可以使用 Graph API 通过应用程序创建帐户。
由于要求,该应用程序使用用户名(而不是电子邮件地址)登录应用程序。到目前为止,除了以下情况外,我已经设法使一切正常:
通过 Graph API 创建帐户时,该帐户的所有者无法重置该帐户的密码。错误是“找不到提供的用户 ID 的帐户”。
通过自定义注册策略创建的帐户并非如此,因此我进行了一些比较,发现对于通过 Graph API 创建的那些帐户,电子邮件丢失(可以在用户 -> 身份验证方法下找到)。我查看了填充该字段,但似乎“邮件”属性是“只读”(不确定这是否是正确的属性)。
目前,我必须通过 Azure 手动设置电子邮件,以便在必要时由其所有者重置这些帐户的密码。这显然不理想,想看看是否有人可能已经解决了这个问题,或者至少得到确认这确实是 Graph API 的限制。
在此先感谢您的帮助
解决方案
所以我设法使用 Jas Suri 概述的方法来完成这项工作。这些是我经历的步骤
- 在我的 B2C 租户中创建了一个自定义属性来保存帐户电子邮件地址
- 在 TrustFrameworkBase.xml 中包含自定义属性声明类型 (extension_emailAddress) 以及 strongAuthenticationEmailAddress
- 更新了我的应用程序的自定义策略以包含本地帐户发现的技术配置文件。我基本上只是从这里复制了必要的点点滴滴
- 更新了本地帐户发现以执行与 extenstion_emailAddres 而不是 strongAuthenticationEmailAddress 的比较。
- 在注册用户旅程中添加了一个额外步骤,以便将 strongAuthenticationEmailAddress 中的值复制到 extension_emailAddress
- 更新了我的 Web API / Graph API“创建用户”功能,以便它设置 extension_appidguid_emailAddress
而已。现在不管帐户是如何创建的,电子邮件地址将存储在扩展属性中,并且密码重置将能够使用该属性找到帐户。
如果有人遇到此问题,很乐意提供更多详细信息。
推荐阅读
- google-chrome - 带有 chrome 67 的 iFrame 调整大小会导致闪烁
- javascript - 如何创建一个扁平的数组数组,这些数组是数组中对象的一部分,本质上是获取多个对象的子数组?
- dart - Flutter 的崩溃报告
- ssas-tabular - Analysis Services 表格磁盘空间
- c# - SetSocketOption 不适用于 SocketOptionName.ChecksumCoverage C#
- java - Java 谷歌表格 API。将数据附加到特定工作表
- php - 如何从 URL 中删除错误的架构(使用 PHP)
- python - 无法在python的字典中存储非字符文本
- java - 从运行 python 代码并需要 virtualenv 的 IntelliJ 运行 Java 代码
- neo4j - 关系已创建但未存储在嵌入式 Neo4j 中