CredMartialCredentials用户名提示(智能卡)

我正在尝试使用CredMartialCredentialLogonUser为使用智能卡的用户帐户获取访问令牌。 有两个帐户可以通过智能卡进行身份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是可怕的。