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

通过遵循this源,我可以使它运行一半,但它似乎仅在从映射帐户过渡到与证书上的CN匹配的帐户时才起作用。由于设置了多用户一智能卡,因此卡上没有配置UPN。

根据this,您必须将LsaLogonUserKERB_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/

10-11 08:50