如何使用Graph API在B2C上访问用户的电子邮件

问题描述 投票:1回答:1

我想知道要发送电子邮件的用户的电子邮件地址。在我的应用程序上,人们可以使用社交帐户(google / facebook / Microsoft)或本地帐户进行注册。创建本地帐户时,我们使用电子邮件。

我找到了有关电子邮件存储方式的信息。https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-policies

电子邮件地址存储:作为用户流程的一部分,可能需要电子邮件地址。如果用户使用社交身份进行身份验证提供商,电子邮件地址存储在otherMails属性中。如果一个本地帐户基于用户名,则电子邮件地址为存储在强大的身份验证详细信息属性中。如果是本地帐户基于一个电子邮件地址,然后该电子邮件地址存储在signInNames属性。电子邮件地址不保证是在上述任何情况下均已验证。租户管理员可以禁用本地帐户基本政策中的电子邮件验证。即使电子邮件地址验证已启用,如果不验证地址他们来自社交身份提供者,而且他们从未改变了。仅显示otherMails和signInNames属性通过Active Directory图形API。中的电子邮件地址强大的身份验证详细信息属性不可用

不确定为什么不使用用户的“邮件”字段...而是使用GraphApi:

我进行GET:https://graph.microsoft.com/v1.0/Users?$ select = displayName,邮件,otherMails,signInNames

某些电子邮件出现在“邮件”上,其他电子邮件出现在“ otherMails”数组上,而“ singInNames”则无法选择:(不显示任何信息,所以有些用户我无法获得有关的信息电子邮件。

我该如何解决?仅使用Azure AD Graph而不是Microsoft Graph API,因为在该API上返回signInNames?

没有任何方法可以将电子邮件始终存储在同一属性上吗?或至少我可以访问Microsoft Graph API的一个?仅在“声明转换”中使用自定义策略?

azure microsoft-graph azure-ad-b2c azure-ad-graph-api
1个回答
0
投票

您需要通过AD Graph API从不同的地方收集电子邮件地址,例如mailotherMailssignInNamessignInNames在Microsoft Graph API中可用NOT

请注意,如果用户使用用户名+电子邮件验证登录,则无法检索使用的电子邮件。

或者您可以添加custom attribute in custom policy,您可以在其中要求用户输入其电子邮件地址。之后,您可以使用AD Graph获取自定义属性(A sample here)。

© www.soinside.com 2019 - 2024. All rights reserved.