自定义Windows身份验证包

时间:2011-06-09 06:44:58

标签: c++ windows-authentication winlogon lsa credential-providers

所以,这是场景。我正在Windows 7中开发一个登录系统。我创建了一个Credential Provider,其中包含一个Credential。凭证有三个输入字段,用户名,密码和PIN。

据我所知,文档(CMIIW)是当我们填写字段并单击登录时,WINLOGON将检索用户名和密码,并通过调用LSALogonUser()进行身份验证将其发送到LSA。 LSA然后将尝试与身份验证包KERBEROS(用于远程登录)或MSV1_0(用于本地登录)进行协商。

仅假设现在的本地方案,用户名和密码将传递给MSV1_0,并与SAM数据库中的用户和密码一起检查。现在的问题是,我不希望用SAM数据库检查它。假设我有一个文件C:\ users.txt,其中包含三元组:{username;密码;销}。这里的所有用户名都是Windows中的现有用户。如何进行身份验证以便遵循我的方式(检查文件C:\ users.txt。

如果我没弄错的话,我们可以创建自己的身份验证包来“包装”MSV1_0。你们有一个示例代码吗?还是有另一种更合适的方式吗?

谢谢,非常感谢你的帮助。

3 个答案:

答案 0 :(得分:0)

由于PKI成为凭证存储的事实标准,因此我从未在过去的GINA中使用过Windows登录。但...

您的问题要求提供一些示例代码,以下是完整说明

http://msdn.microsoft.com/en-gb/magazine/cc163489.aspx#S4

这有点旧,所以它指的是智能卡,也许当你说令牌你还在谈论智能卡时,但我怀疑你的意思是USB驱动器。但是,如果您尝试这种级别的开发,交换智能卡读/写和USB读/写代码应该相当简单。

答案 1 :(得分:0)

你可以试试windows sdk的样本。有一些子认证包比完整的AP更容易实现。

答案 2 :(得分:-3)

您始终可以编写自己的代码来检查数据库中的数据输入,有很多方法可以做到这一点。 This is a video about smart and dull ways to do that.

这是关于Custom Windows Authentication Package的页面,但我还没有真正检查