当用户名是 UPN 格式时,即使密码正确,Azure AD 用户的 LogonUser() 也会失败

Posted

技术标签:

【中文标题】当用户名是 UPN 格式时,即使密码正确,Azure AD 用户的 LogonUser() 也会失败【英文标题】:LogonUser() fails for Azure AD user when username is in UPN format even when password is correct 【发布时间】:2021-07-22 18:23:00 【问题描述】:

这是我检查用户输入的密码是否正确的代码。 我的用户是登录到 Windows 10 Azure AD 加入机器的 AzureAD 用户。


if (LogonUser(upn., NULL, pwd, LOGON32_LOGON_NETWORK,
LOGON32_PROVIDER_DEFAULT, &token) != 0)

LogonUser 失败并出现错误 1326 。用户名或密码无效。 但是在 Domain\username 格式中同样可以正常工作。

当用户名是 UPN 格式时,我该怎么做才能让它工作。

【问题讨论】:

有趣...我知道文档说 lpszDomain 参数对于 UPN 格式需要为 NULL。对于笑容,您是否尝试过使用“AzureAD”? 是的,它适用于添加 AzureAD。但我是否应该这样做值得怀疑,因为文档说在使用 upn 时使用 null。 那个 API 已经很老了。可能他们还没有更新文档。 AzureAD 加入是相对较新的……肯定比最初编写该文档时要新得多。但是,当医生说不这样做时,我理解以这种方式调用它的恐惧。我只是认为 AzureAD 增加了另一个级别的复杂性,在该 API 中解决它的唯一方法是包含 AzureAD 域。希望雷蒙德能加入。 【参考方案1】:

谢谢约瑟夫·威尔考克森

将域字段设置为“AzureAD”解决了该问题。希望微软尽快更新文档。

【讨论】:

以上是关于当用户名是 UPN 格式时,即使密码正确,Azure AD 用户的 LogonUser() 也会失败的主要内容,如果未能解决你的问题,请参考以下文章

使用在端点上设置了标识的 WCF:正确的 UPN 不起作用

推荐的 NameIdFormat 用于在 SAML 中使用用户主体名称 (UPN) 作为 NameId

学习Java,For循环无法呈现。

声明环境中用户主体名称的 SharePoint UserProfile

使用PowerShell 批量修改O365 用户UPN

当用户输入错误的密码时,哪个错误消息更好?