使用 Windows Vista 的凭据提供程序创造自定义的登录体验
2009-02-09 17:43:37 来源:WEB开发网总之,混合凭据提供程序的代码中有很大一部分都不是新写的。其最终结果是将测试和调试时间减到最少。实际上,核心调试阶段花费了不到一天的时间,这证明了新接口的易用性。
现在详细地讨论一下我使用此示例凭据提供程序所要执行的操作。
要求
构思此混合凭据提供程序时,我希望达到以下这些要求:
使之基于智能卡运行
最大限度地增加代码的重用
最大限度地减少额外配置和基础结构需求
因此我采用了我的所谓混合方法,换言之就是密码(为了安全起见)加智能卡(为了方便起见)。由于混合提供程序的概念是基于用户名和密码的,因此我将从 Platform SDK 分离出来的密码提供程序示例作为我设计该方法的起点。然后,我添加了来自 SDK 的 PropCert 示例;其中包括了用于枚举智能卡读卡器、卡和数字证书的逻辑过程。我觉得我要做的就是,将 PropCert 中基于证书的逻辑代码替换为用于读取我自己的凭据数据的一些新代码,然后简单地将这两个示例连在一起就可以了!
由于我们将从智能卡读取密码登录信息,这意味着还有一个需求:一个使用该凭据初始化智能卡的工具。初始化工具将放在最后讨论。
根据这些要求,我们来看一看凭据提供程序体系结构的设计以及它如何影响我的示例代码设计。
设计
我们先从运行时凭据提供程序的角度来讨论一下凭据提供程序体系结构的设计。
虽然我尚未详细讨论混合示例,但我将使用它作为分析运行中的新凭据提供程序体系结构的基础。为了便于讨论,我的示例代码包含了调试跟踪。此跟踪包含从每个已实现的凭据提供程序例程进行的 OutputDebugString 调用。在这些跟踪调用中,我使用两个缩写。对新的 ICredentialProvider 接口(请参见图 3)的调用以“Provider::”开头。对 ICredentialProviderCredential 接口(请参见图 4)的调用以“Credential::”开头。请注意,所有凭据提供程序相关接口都是在新的公共头文件 credentialprovider.h 中定义的。
更多精彩
赞助商链接