微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在混合域计算机上获取 SAM 兼容域名?

如何解决如何在混合域计算机上获取 SAM 兼容域名?

编辑: 感谢@RbMm 的澄清问题!

我正在凭证提供程序(不是包装提供程序)中实施 MFA。我必须支持的选项之一是验证用于登录计算机并与 MFA 提供程序验证相同的 UPN。我使用 LsalogonUser、ImpersonateLoggedOnUser 和 GetUserNameEx(UserNamePrincipal) 来获取此信息。这适用于大多数环境;但是,在连接到混合 Azure AD 域的计算机上,LsalogonUser 失败。这导致了一项调查,其结果详述如下:

我有一台计算机属于 AzureAD 混合域,但是我无法从 AzureAD 域名中获取与 SAM 兼容的域名。 例如, 我可以使用 AzureAD upn 为例如 user@domain.com 的用户登录。 SAM 兼容名称是 localdomain\localuser。 GetUserNameEx(NameUserPrincipal) 返回 user@domain.com GetUserNameEx(NameSamCompatible) 返回 localdomain\localuser 但是,在以下代码中,TranslateName 失败,GetLastError() 返回 ERROR_NO_SUCH_DOMAIN。

TCHAR validBuffer[MAX_PATH+1];
ULONG nValidSize = MAX_PATH;
TranslateName("user@domain.com",NameUserPrincipal,NameSamCompatible,validBuffer,&nValidSize);

我也尝试了以下 API 没有成功,它们都失败并返回不同的值:

  • GetComputerObjectName 因传递给 NameFormat 的任何值而失败

  • GetCompterNameEx 失败并显示 ERROR_CANT_ACCESS_DOMAIN_INFO 对于 NameType 的任何相关值

  • NetWkstaGetInfo 不会在任何字段中返回任何有用的信息

  • 此外,如果您在此电脑 > 属性 > 高级系统属性中查看计算机的加入信息,您会将其视为工作组的一部分,而不是域的一部分。 - 如果您运行 dsregcmd /status 命令:

    • 在上述用户登录会话中执行:“诊断”部分在输出中列出了本地域
    • 从使用 LocalSystem 帐户运行的命令提示符执行,输出不会在任何地方列出本地域。

重点(感谢@RbMm)- 使用“其他用户”磁贴时,代码为 Windows 凭据提供程序提供服务。我正在尝试使用 LsalogonUser 预先验证输入的凭据,然后在我的 ICredentialProviderCredential2::GetSerialization 实现中成功序列化它们。使用 'user@domain.com' 失败,而使用 'localdomain\user@domain.com' 或 'localdomain\localuser' 成功。使用 Windows 的内置密码提供程序登录时,当然可以使用“user@domain.com”。也许我应该为 LsalogonUser 使用不同的身份验证包?

我被难住了。

感谢任何人的帮助..

  • 乌里尔

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。