Microsoft graph api 尝试使用外部域的用户名更改本地Azure AD B2C用户的密码时出现错误AADSTS50034

Microsoft graph api 尝试使用外部域的用户名更改本地Azure AD B2C用户的密码时出现错误AADSTS50034,microsoft-graph-api,azure-ad-b2c,Microsoft Graph Api,Azure Ad B2c,我正在为Angular 6前端应用程序开发Azure AD B2C,并使用Microsoft Graph API来更改签名用户的密码。我正在使用授权代码流获取access\u令牌 当用户具有类似xyz@myb2cname.onmicrosoft.com,我得到一个访问\u令牌,然后调用https://graph.microsoft.com/v1.0/users/{id}/changePassword 但是当我尝试对用户名为xyz@gmail.com或abc@hotmail.com,从授权代码流(

我正在为Angular 6前端应用程序开发Azure AD B2C,并使用Microsoft Graph API来更改签名用户的密码。我正在使用授权代码流获取
access\u令牌

当用户具有类似
xyz@myb2cname.onmicrosoft.com
,我得到一个
访问\u令牌
,然后调用
https://graph.microsoft.com/v1.0/users/{id}/changePassword

但是当我尝试对用户名为
xyz@gmail.com
abc@hotmail.com
,从授权代码流(
grant\u type=password
)获取
access\u令牌时出错注意:这些用户是我的AAD B2C租户中的“本地”帐户

以下是我收到的错误消息:

{
    "error": "invalid_grant",
    "error_description": "AADSTS50034: To sign into this application the account must be 
                          added to the myb2cname.onmicrosoft.com directory.
                          Trace ID: 8fcae061-5088-4393-9e5b-d0a83d1d0a00
                          Correlation ID: 0dc6c906-c54b-4cd8-ae8b-46f3f6118e40
                          Timestamp: 2018-08-01 06:16:55Z",
    "error_codes": [
        50034
    ],
    "timestamp": "2018-08-01 06:16:55Z",
    "trace_id": "8fcae061-5088-4393-9e5b-d0a83d1d0a00",
    "correlation_id": "0dc6c906-c54b-4cd8-ae8b-46f3f6118e40"
}

对于使用电子邮件身份提供商(登录注册策略)登录的用户,当其用户名看起来像
xyz@gmail.com
abc@hotmail.com而不是
of
xyz@myb2cname.onmicrosoft.com

这是预期的行为。在实施广告之前,您需要清楚地了解广告

在Azure AD中,要根据目录对用户进行身份验证,用户应该是Active Directory的一部分。不属于Active Directory一部分的用户将不会进行身份验证。只有当用户经过身份验证时,才会生成令牌


尝试为不属于Active Directory的用户生成令牌类似于使用无效用户帐户登录Azure Portal。

当外部用户登录到您的AAD时,它不会使用传统密码创建传统用户,而是创建“来宾”用户。实际用户保留在原始AAD租户中,您的AAD租户仅存储该用户的占位符


您不能更改来宾用户的密码,因为您的AAD实际上没有为该用户分配密码。您的AAD持有授权(用户有权访问的内容),但依赖用户的AAD进行身份验证(用户就是他们声称的用户)

您无法使用Microsoft Graph API更改本地帐户用户的密码,因为当前Azure AD B2C应用程序无法在Microsoft application Registration Portal中注册,因此无法与Microsoft Graph API一起使用

您应该使用更改本地帐户用户的密码


这意味着Azure AD B2C应用程序不必为用户收集当前密码或新密码。

我在Azure AD-B2C中创建和更新用户的相同情况下运行 但无法删除或重置密码。 因为当前,读写目录数据权限不包括删除用户或更新用户密码的功能


要存档此文件,我必须遵循上面的链接,它工作得非常出色。

我已经在上面的问题中提到,用户已注册到我的应用程序中。当我转到我的B2C注册应用程序时,我可以在用户列表中看到这些用户。这意味着它们是我的目录的一部分,即使它们与xyz@gmail.com或任何其他外部电子邮件域提供商,而不是xxx@myB2Cname.onmicrosoft.com.Did你创建了密码重置策略?我创建了,我想它们是用来从登录页面重置密码的!不过这很好。我想要的是,用户可以在使用Microsoft graph changePassword登录后从应用程序更改密码,它适用于我的B2C用户xxx@myB2Cname.onmicrosoft.com用户名。但不适用于具有xyz@gmail或xyz@hotmail.com.I我认为您需要修改外部协作设置,以使来宾用户利用图形API。我以前对此有疑问,并在我的Azure AD B2C中转到此设置页面,但每当我进入此页面时,我都会看到此错误消息抱歉!您无权访问此页面。我想我需要访问此网站,并尝试在此处更改设置,这应该会起作用,我会尽快完成并恢复,非常感谢您的指导。因此,根据您的回答,我假设,如果用户使用任何身份提供商(无论是微软、谷歌还是谷歌)从登录/注册页面注册到我的B2C应用程序,Facebook或电子邮件注册(本地帐户)我无法使用Microsoft graph changePassword endpoint更改其密码?我想我误解了电子邮件注册(本地帐户),最终它还是一个身份提供者,就像其他人和用户一样,使用带有任意电子邮件地址的电子邮件注册创建了他们的帐户(例如bob@gmail.com)仍然和工作或学校帐户不同。帐户可以是本地帐户、社会帐户或两者的组合。如果您希望使用组合,则需要确保已正确设置。请查看以了解更多详细信息。