我正在尝试使用CredMartialCredential
和LogonUser
为使用智能卡的用户帐户获取访问令牌。 有两个帐户可以通过智能卡进行身份validation( 这里描述(有点))。
根据这个来源,我能够完成工作,但似乎只能在从映射帐户转换到与证书上的CN相匹配的帐户时才起作用。 作为多用户一个智能卡设置的结果,卡上没有configurationUPN。
根据这个你必须使用KERB_CERTIFICATE_LOGON
LsaLogonUser
,但是这两个文件都是钝的,没有例子。 我发现这个,但它似乎需要SeTcbPrivilege
使用它…我试图实现,但我越来越c000006d:c0000321(STATUS_LOGON_FAILURE,STATUS_SMARTCARD_SUBSYSTEM_FAILURE)
谢谢!
在使用相同智能卡密钥对多个用户进行身份验证的情况下使用LsaLogonUser
时,您必须在KERB_CERTIFICATE_LOGON
提供用户名。 这是由我的问题提供的链接。 如果智能卡上有多个密钥,则会选择第一个密钥,如果这不是用于Windows登录的密钥,则会失败。 您必须在KERB_CERTIFICATE_LOGON
提供容器名称(也包含在示例中,但保留为空)。
您还需要用Microsoft Base Smart Card Crypto Provider
替换CSP名称( WCHAR szCspName[] = L"IDRIX Generic Cryptographic Service Provider";
)。
如果您没有SeTcbPrivilege
(将调用替换为LsaRegisterLogonProcess
),则可以使用LsaConnectUntrusted
。 但是,除非您从Impersonate a client after authentication
权限开始,否则您将无法对从LsaLogonUser
获取的令牌执行任何操作。
祝你好运,这个API是可怕的。