使用C#实现Windows凭据提供程序

11

有人已经成功用C#创建了自定义的Windows凭据提供程序吗? Windows SDK中的示例都是用C ++编写的。我进行了一些初步搜索,发现可能是可能的,但似乎找不到任何确认的人。


1
我不确定这个代码在托管代码中是否有效。我质疑为什么你会想要用托管代码来编写这个,但是尝试一下也不难。你需要为所有的Win32函数编写大量的P/Invoke定义。根据你对C++的了解程度,这可能比一开始就用更合适的语言编写它浪费更多时间。 - Cody Gray
3个回答

12

+1 for pgina。正如Cody所说,没有可用的托管API可以用来制作凭据提供程序,如果你想使用pInvoke方法,那么解决pInvoke问题所需的时间可能比解决凭据提供程序问题还要多。

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


6
Windows Vista及更高版本中新的CredentialProvider模型基于COM。只要您实现了正确的COM接口,就可以实现此操作。
基于这一点,与旧的GINA模块相比,应该更容易构建,因为旧的GINA模块使用DLL入口点和函数指针而不是COM接口。
鉴于.Net可以与COM互操作,所以只需按照以下步骤即可轻松完成:
1. 构建ICredentialProvider接口的C#定义,并添加正确的GUIDS的COM属性。 2. 构建实现ICredenitalProvider并标记为COMVisible(True)的凭证提供程序类。 3. 使用Regasm注册新的程序集。 4. 添加正确的注册表键以在Windows中注册您的新CredentialProvider(Software\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers)。
如果您完成了以上所有步骤,那么您将拥有一个用C#编写的工作凭证提供程序。

3

推荐使用pGina。我试用过它,它在我的Windows 8安装上运行良好,所以它应该能够在之前的所有Windows版本上良好运行。尽管还处于早期阶段,但如果不想深入到项目的本地一半中创建自定义UI,则看不到任何途径。希望这可以帮助你!

[编辑]再次阅读Cody Gray的评论。为了清楚起见,pGina实际上只是为您编写的本地代码。但是,如果您不需要太多关于如何呈现它的控制权,那么pGina是可行的选择,但如果需要更多控制,则最好从头开始使用C++编写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接