我正在实施一种基于 Microsoft 白皮书“ Windows 7 和 Windows Server 2008 R2 中使用一次性密码的强身份验证”的 OTP 解决方案。
该白皮书相关部分的摘要是通过为 Windows CNG 子系统实现自定义密钥存储提供程序 (KSP) 来伪造智能卡读卡器的存在。但是,按照所述说明进行操作后,我无法在需要时让操作系统使用我的自定义 KSP。
在我的凭据提供程序中,我正在创建一个具有 KERB_CERTIFICATE_LOGON 和 KERB_SMARTCARD_CSP_INFO 结构的身份验证包。我的自定义 KSP 根据需要在 KERB_SMARTCARD_CSP_INFO 中引用(它也已正确注册,可以枚举,并且可以与 NCrypt API 一起使用)。然而,在 ICredentialProviderCredential::GetSerialization 返回后(甚至没有将 DLL 加载到内存中)或在我的独立测试应用程序中调用 LsaLogonUser() 期间,操作系统永远不会加载它。
该问题与 MSDN 论坛中描述的问题相同(没有任何答案),并且我得出了相同的结论,即该问题与 KERB_SMARTCARD_CSP_INFO 的内容有关(可以在此处找到示例用法) - 但是由于几乎没有文档和这种罕见情况没有一个例子,我不知道该怎么办......
kerberos smartcard one-time-password credential-providers local-security-authority