我正在尝试使用CredMartialCredential
和LogonUser
使用智能卡为用户帐户获取访问令牌。有两个可以使用智能卡进行身份验证的帐户(描述为(类型)here)。
通过遵循this源,我可以使它运行一半,但它似乎仅在从映射帐户过渡到与证书上的CN匹配的帐户时才起作用。由于设置了多用户一智能卡,因此卡上没有配置UPN。
根据this,您必须将LsaLogonUser
和KERB_CERTIFICATE_LOGON
一起使用,但是这两个文档的文档都是晦涩的,没有示例。我找到了this,但是似乎您需要SeTcbPrivilege
才能使用它。
谢谢!
最佳答案
在使用同一智能卡密钥对多个用户进行身份验证的情况下使用LsaLogonUser
时,必须在KERB_CERTIFICATE_LOGON
中提供用户名。我的问题中提供的链接证明了这一点。
如果智能卡上有多个键,它将选择第一个,如果不是Windows登录所用的键,它将失败。
您必须在KERB_CERTIFICATE_LOGON
中提供容器名称(示例中也包含该容器,但留为空白)。
您还将需要用WCHAR szCspName[] = L"IDRIX Generic Cryptographic Service Provider";
替换CSP名称(Microsoft Base Smart Card Crypto Provider
)。
如果没有LsaConnectUntrusted
,可以使用SeTcbPrivilege
(将呼叫替换为LsaRegisterLogonProcess
)。但是,除非使用LsaLogonUser
特权开始,否则您将无法使用从Impersonate a client after authentication
获得的令牌进行任何操作。
祝您好运,此API很糟糕。
关于c++ - CredMartialCredentials用户名提示(智能卡),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45356204/