我有一个WebAPI通过AzureAD Graph API在AzureAD B2C租户中创建本地帐户。创建用户后,他们会收到带有临时密码的邀请电子邮件。在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分钟),然后才能使用其最新密码登录。
关于造成延迟的原因有什么想法?
更重要的是,如何避免这种延迟以及与之相关的不良用户体验?
答案 0 :(得分:1)
它用the docs编写并明确说明:
<ul class="options">
<li><a class="active" href="#" data-target="external">External</a></li>
<li><a href="#" data-target="internal">Internal</a></li>
<li><a href="#" data-target="both">Both</a></li>
</ul>
因此,如文档所述,总是将"passwordProfile": {
"password": "P@ssword!",
"forceChangePasswordNextLogin": false // always set to false
},
"passwordPolicies": "DisablePasswordExpiration"
设置为 false !另外,在始终使用B2C时,请始终将forceChangePasswordNextLogin
设置为passwordPolicies
。
在提供的代码示例中,您做出了两(两)件错误的事情:
您通过
强制密码更改下一次登录 DisablePasswordExpiration
您没有明确禁用密码过期。
使用Azure AD B2C时,在执行操作之前首先阅读文档非常重要。它与普通的Azure AD 不同。一切都在文档中进行了解释。如果您发现某些丢失或错误的信息,请使用每个文档页面底部的反馈表。
下一次登录时强制执行密码重置/更改的功能请求已经logged here。您可以投票使它在优先级列表中更高。
作为最后的选择,如果您真的想实现此目的,则可以使用c ustom policies(REST API来实现检查用户是否应更改密码的逻辑)来 。