【问题标题】:Error AADSTS50034 when attempting to change password for local Azure AD B2C users with a username from an external domain尝试使用来自外部域的用户名更改本地 Azure AD B2C 用户的密码时出现错误 AADSTS50034
【发布时间】:2018-08-01 06:49:40
【问题描述】:

我正在为我的 Angular 6 前端应用程序开发 Azure AD B2C,并使用 Microsoft Graph API 来更改登录用户的密码。我正在使用授权码流程获得access_token。

当用户拥有像xyz@myb2cname.onmicrosoft.com 这样的用户名时,它可以正常工作,我得到一个access_token,然后调用https://graph.microsoft.com/v1.0/users/{id}/changePassword。

但是,当我尝试对使用 xyz@gmail.com 或 abc@hotmail.com 之类的用户名的用户执行相同操作时,在获取 access_token from 授权码流 (grant_type=password) 时出现错误。 注意:这些用户是我的 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 instead 或 xyz@myb2cname.onmicrosoft.com 时,如何为使用电子邮件身份提供商(登录-注册策略)登录的用户调用 changePassword?

【问题讨论】:

    标签: microsoft-graph-api azure-ad-b2c


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经在上面提到过,用户注册到我的应用程序。当我转到我的 AD B2C 注册应用程序时,我可以在用户列表中看到这些用户。这意味着他们是我目录的一部分,即使他们使用 xyz@gmail.com 或任何其他外部电子邮件域提供商而不是 xxx@myB2Cname.onmicrosoft.com 注册。
    • 您是否创建了密码重置策略?
    • 我做了,我猜它们是用来从登录页面重置密码的!不过那工作得很好。我想要的是,用户可以在使用 Microsoft graph changePassword 登录后从应用程序更改密码,它适用于我的 B2C 用户,用户名为 xxx@myB2Cname.onmicrosoft.com。但不适用于 xyz@gmail 或 xyz@hotmail.com 的用户。
    • 我认为您需要修改外部协作设置以使来宾用户利用 Graph API。
    • 我之前有这个疑问,并在我的 Azure AD B2C 中转到此设置页面,但每当我进入此页面时,我都会看到此错误消息 对不起!您无权访问此页面。我想我需要访问它,并尝试在此处更改设置,这应该会起作用,我会尽快完成并恢复,非常感谢您的指导。
    【解决方案2】:

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

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

    【讨论】:

    • 所以我假设您的回答是,如果用户使用任何身份提供商从登录/注册页面注册我的 B2C 应用程序,无论是其 Microsoft、Google、Facebook 还是电子邮件注册(本地帐户)我无法使用 microsft graph changePassword 端点更改他们的密码?我想我误解了电子邮件注册(本地帐户),最后它也是一个身份提供者,就像其他人一样,使用电子邮件注册和任意电子邮件地址(例如 bob@gmail.com)创建他们的帐户的用户仍然不一样工作或学校帐户。
    • 帐户可以是本地帐户、社交帐户或两者的组合。如果您希望使用该组合,则需要确保已正确设置。更多详情请查看docs.microsoft.com/en-us/azure/active-directory-b2c/…。
    【解决方案3】:

    您无法使用 Microsoft Graph API 更改本地帐户用户的密码,因为目前,无法使用 Microsoft 应用程序注册门户注册 Azure AD B2C 应用程序,因此它不能与Microsoft Graph API。

    您应该使用a custom policy 更改本地帐户用户的密码。

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

    【讨论】:

      【解决方案4】:

      我遇到了同样的情况,我能够在 AZURE AD-B2C 中创建和更新用户 但无法删除或重置密码。 因为目前读写目录数据权限不包括删除用户或更新用户密码的能力

      Configure delete or update password permissions for your application

      要存档这个,我必须点击上面的链接,它就像一个魅力。

      【讨论】:

        猜你喜欢
        • 2020-02-01
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多