CredMartialCredentials 用户名提示(智能卡)

CredMartialCredentials username hint (smartcard)

我正在尝试使用 CredMartialCredentialLogonUser 为使用智能卡的用户帐户获取访问令牌。有两个帐户可以使用智能卡进行身份验证(描述(有点)here)。

我能够通过遵循 this 源使其工作一半,但它似乎只在从映射帐户转换到与证书上的 CN 匹配的帐户时才有效。由于多用户一个智能卡设置,卡上没有配置 UPN。

根据 this you have to use LsaLogonUser with KERB_CERTIFICATE_LOGON but the documentation for both of those is obtuse and doesn't have examples. I found this,但似乎您需要 SeTcbPrivilege 才能使用它...我尝试实施,但我得到 c000006d:c0000321(STATUS_LOGON_FAILURE, STATUS_SMARTCARD_SUBSYSTEM_FAILURE)

谢谢!

在多个用户使用同一智能卡密钥进行身份验证的情况下使用 LsaLogonUser 时,您必须在 KERB_CERTIFICATE_LOGON 中提供用户名。我的问题中提供的 link 证明了这一点。 如果智能卡上有多个密钥,它将 select 第一个,如果不是用于 windows 登录的密钥,则会失败。 您必须在 KERB_CERTIFICATE_LOGON 中提供容器名称(也包含在示例中但留空)。

您还需要将 CSP 名称 (WCHAR szCspName[] = L"IDRIX Generic Cryptographic Service Provider";) 替换为 Microsoft Base Smart Card Crypto Provider

如果您没有 SeTcbPrivilege,则可以使用 LsaConnectUntrusted(替换对 LsaRegisterLogonProcess 的调用)。但是,除非您从 Impersonate a client after authentication 特权开始,否则您将无法使用从 LsaLogonUser 获得的令牌执行任何操作。

祝你好运,这 API 太糟糕了。