使用C#的Windows凭据提供程序

有人在C#中成功创建了自定义Windows凭据提供程序吗? Windows SDK中的示例都使用C ++。 我做过的一些初步搜索表明它可能是可能的,但似乎找不到任何确认它的人。

为pgina +1。 正如Cody所说,没有可用于创建凭据提供程序的托管API,如果您想要使用pInvoke路由,则可能需要花费更多时间来解决pInvoke问题,而不是计算凭据提供程序。

pGina可以帮助你的是它有一个很好的插件架构,而插件是用托管代码编写的。 请参见此处的图表。 pGina处理与LogonUI(本机代码)的通信,但依赖于插件(托管)来进行实际身份validation,这可能是您想要控制的(否则您可能不需要自己的凭据提供程序)。

Windows Vista及更高版本中的新CredentialProvider模型基于COM。 这意味着只要您实现正确的COM接口就应该可行。

基于此,它应该比旧的GINA模型更容易构建,因为较旧的GINA模块使用DLL入口点和函数指针而不是COM接口。

鉴于.Net能够与COM进行交互,它应该像以下一样简单:

  1. 构建ICredentialProvider接口的C#定义,并使用正确的GUID添加正确的COM属性
  2. 构建实现ICredenitalProvider的凭证提供程序类,并标记为COMVisible(True)
  3. 使用Regasm注册新程序集
  4. 添加正确的注册表项以在Windows中注册新的CredentialProvider(Software \ Microsoft \ Windows \ CurrentVersion \ Authentication \ Credential Providers)

如果您完成所有这些工作,您将拥有一个使用C#编写的工作凭证提供程序

看看pGina。 我正在玩它,它似乎在我的Windows 8安装上运行正常,所以它应该适用于之前的所有Windows版本。 它仍然处于相当早期的阶段,我无法看到任何创建自定义UI的方法,而无需深入研究项目的原生一半。 希望这可以帮助!

[编辑]再次阅读科迪格雷的评论。 需要说明的是,pGina实际上只是为您编写的本机代码。 但是,是的,你可能有更多的控制权在C ++中开始编写它,但是如果你不需要太多控制它的表现,那么pGina就是你要走的路。