首页 > 解决方案 > 初始密码更改后,在 AzureAD B2C 中使用“forceChangePasswordNextLogin”创建的本地帐户无法再登录

问题描述

我有一个通过 AzureAD Graph API 在 AzureAD B2C 租户中创建本地帐户的 WebAPI。创建用户后,他们会收到一封包含临时密码的邀请电子邮件。用户在 Graph API 中创建,并带有密码配置文件,以强制他们在首次登录时更改其临时密码。

user.PasswordProfile = new PasswordProfile();
user.PasswordProfile.Password = GetTemporaryPassword();
user.PasswordProfile.ForceChangePasswordNextLogin = true;

当用户第一次登录(通过 B2C 登录策略)时,系统会有效地提示更改其密码,并且到目前为止一切正常。

用户登录后,如果他退出然后尝试立即登录,则身份验证始终失败并显示错误消息We don't recognize this user ID or password. Please try again. Forgot your password?
如果他使用之前的临时密码,则看起来身份验证成功,但会要求他再次更改密码。在那个视图中,Current password不匹配原始临时密码而是最新密码。

我从 Graph API 确认比第一次登录之前,PasswordProfile仍然附加到用户。

{
    "odata.type": "Microsoft.DirectoryServices.User",
    "objectType": "User",
    "objectId": "00000000-0000-0000-0000-000000000000",
    ...
    "passwordProfile": {
        "password": null,
        "forceChangePasswordNextLogin": true,
        "enforceChangePasswordPolicy": false
    },
    ...
}

然后在初始密码更改后,PasswordProfile强制密码重置不再在这里。

{
    "odata.type": "Microsoft.DirectoryServices.User",
    "objectType": "User",
    "objectId": "00000000-0000-0000-0000-000000000000",
    ....
    "passwordPolicies": null,
    "passwordProfile": null,
    ....
}

此时,用户能够登录的唯一解决方案是等待一段时间(5-10 分钟),然后才能使用其最新密码登录。

关于造成这种延迟的原因有什么想法吗?
更重要的是,如何避免这种延迟以及与之相关的糟糕的用户体验?

标签: azureazure-active-directoryazure-ad-b2cazure-ad-graph-api

解决方案


它写在文档中并明确解释:

"passwordProfile": {
    "password": "P@ssword!",
    "forceChangePasswordNextLogin": false   // always set to false
},
"passwordPolicies": "DisablePasswordExpiration"

因此,如文档中所述,始终将 设置forceChangePasswordNextLoginfalse!此外,在使用 B2C 时,请始终将.passwordPoliciesDisablePasswordExpiration

在您提供的代码示例中,您做了两(两)个错误的事情:

  1. 您通过以下方式强制更改密码

    user.PasswordProfile.ForceChangePasswordNextLogin = true;

  2. 您没有明确禁用密码过期。

使用 Azure AD B2C 时,在采取行动之前先阅读文档非常重要。它不同于普通的 Azure AD。一切都在文档中进行了解释。如果您看到一些缺失或错误的信息,请使用每个文档页面底部的反馈表。

此处已记录了在下次登录时强制重置/更改密码的功能请求。您可以投票以使其在优先级列表中更高。

作为最后的手段,如果你真的想实现这个,可以使用自定义策略(REST API 来实现逻辑来检查用户是否应该更改他的密码)。


推荐阅读