CredMartialCredentials 用户名提示(智能卡)
CredMartialCredentials username hint (smartcard)
我正在尝试使用 CredMartialCredential
和 LogonUser
为使用智能卡的用户帐户获取访问令牌。有两个帐户可以使用智能卡进行身份验证(描述(有点)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 太糟糕了。
我正在尝试使用 CredMartialCredential
和 LogonUser
为使用智能卡的用户帐户获取访问令牌。有两个帐户可以使用智能卡进行身份验证(描述(有点)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 太糟糕了。