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

时间:2013-04-18 20:42:43

标签: c# .net credential-providers

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

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:5)

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)
  5. 如果您完成所有这些工作,您将拥有一个使用C#

    编写的工作凭证提供程序

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

之所以可行是因为凭据提供者是COM对象,并且COM对象可以在托管代码中实现。

请参阅this blog,以获取一些详细信息和良好的起点。 Github仓库是here

相关问题