azure - 初始密码更改后,在 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 分钟),然后才能使用其最新密码登录。
关于造成这种延迟的原因有什么想法吗?
更重要的是,如何避免这种延迟以及与之相关的糟糕的用户体验?
解决方案
它写在文档中并明确解释:
"passwordProfile": {
"password": "P@ssword!",
"forceChangePasswordNextLogin": false // always set to false
},
"passwordPolicies": "DisablePasswordExpiration"
因此,如文档中所述,始终将 设置forceChangePasswordNextLogin
为false!此外,在使用 B2C 时,请始终将.passwordPolicies
DisablePasswordExpiration
在您提供的代码示例中,您做了两(两)个错误的事情:
您通过以下方式强制更改密码
user.PasswordProfile.ForceChangePasswordNextLogin = true;
您没有明确禁用密码过期。
使用 Azure AD B2C 时,在采取行动之前先阅读文档非常重要。它不同于普通的 Azure AD。一切都在文档中进行了解释。如果您看到一些缺失或错误的信息,请使用每个文档页面底部的反馈表。
此处已记录了在下次登录时强制重置/更改密码的功能请求。您可以投票以使其在优先级列表中更高。
作为最后的手段,如果你真的想实现这个,可以使用自定义策略(REST API 来实现逻辑来检查用户是否应该更改他的密码)。
推荐阅读
- java - openjdk 8 补丁版本
- postgresql - 从 PostgreSQL 读取仅附加列表
- python - 实现代码以在python中的多个进程之上启动多个线程
- node.js - NodeJS CI/CD 构建缺失文件
- javascript - 如何使用 react-google-maps 从两个不同的 SearchBox 中获取 formatted_address?
- android-studio - 这个 Activity 已经有一个由窗口装饰提供的操作栏。AppTheme 无法解决
- java - 这个 UML 关联是否正确匹配代码?
- android - 访问 CameraX 中的图像数据缓冲区
- security - SSAS:多项措施的单元数据安全性
- json - 解析和转换的区别?