当用户名是 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() 也会失败的主要内容,如果未能解决你的问题,请参考以下文章
推荐的 NameIdFormat 用于在 SAML 中使用用户主体名称 (UPN) 作为 NameId