我正在为我的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"
}
对于用户使用{{1}的changePassword
或xyz@gmail.com
的用户名,如何使用电子邮件身份提供商(SignIn-SignUp Policy)登录的用户如何呼叫abc@hotmail.com instead
}?
答案 0 :(得分:1)
这是预期的行为。在实施之前,您需要清楚地了解AD。
在Azure AD中,要根据目录对用户进行身份验证,该用户应是Active Directory的一部分。不属于Active Directory的用户将无法通过身份验证。仅当用户通过身份验证时,才会生成令牌。
尝试为不属于Active Directory的用户生成令牌类似于使用无效的用户帐户登录Azure门户。
答案 1 :(得分:0)
当外部用户登录到您的AAD时,它不会使用传统密码来创建传统用户,而是会创建“来宾”用户。实际用户仍保留在原始AAD租户中,您的AAD租户仅存储该用户的占位符。
您无法更改访客用户的密码,因为您的AAD实际上没有分配给该用户的密码。您的AAD拥有授权(用户有权访问的权限),但依赖于用户的AAD进行身份验证(用户就是他们声称的身份)。
答案 2 :(得分:0)
您无法使用Microsoft Graph API更改本地帐户用户的密码,因为当前,Azure AD B2C应用程序无法在Microsoft应用程序注册门户中注册,因此,不能与Microsoft Application Registration Portal一起使用。 Microsoft Graph API。
您应使用a custom policy更改本地帐户用户的密码。
这意味着Azure AD B2C应用程序不必收集用户的当前密码或新密码。
答案 3 :(得分:0)
在相同的情况下,我可以在AZURE AD-B2C中创建和更新用户 但无法删除或重置密码。 因为当前,“读取和写入目录数据”权限不包括删除用户或更新用户密码的功能
Configure delete or update password permissions for your application
要对此进行存档,我必须遵循上面的链接,它的工作原理很吸引人。