10

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

4

4 回答 4

12

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

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

于 2013-05-19T19:34:56.650 回答
5

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# 编写

于 2014-05-06T14:00:43.697 回答
3

查看 pGina。我一直在玩它,它似乎在我的 Windows 8 安装上运行良好,因此它应该也适用于之前的所有 Windows 版本。虽然它仍处于早期阶段,但我看不到任何创建自定义 UI 的方法,而无需深入研究项目的本机部分。希望这可以帮助!

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

于 2013-04-19T20:20:07.930 回答
0

这是可能的,因为凭据提供程序是 COM 对象,并且 COM 对象可以在托管代码中实现。

有关一些详细信息和一个好的起点,请参阅此博客。Github 仓库在这里

于 2020-08-30T12:17:20.770 回答