【问题标题】:Windows Credential Provider with C#使用 C# 的 Windows 凭据提供程序
【发布时间】:2013-04-12 03:25:57
【问题描述】:

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

【问题讨论】:

  • 我不确定这是否适用于托管代码。我质疑你为什么想要在托管代码中编写它,但尝试起来并不难。您将需要为所有 Win32 函数编写大量 P/Invoke 定义。根据您对 C++ 的了解,这可能会浪费您更多的时间,而不是一开始就用更合适的语言编写它。

标签: c# .net credential-providers


【解决方案1】:

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

请参阅this blog 了解一些详细信息和一个好的起点。 Github repo 是here

【讨论】:

    【解决方案2】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-16
          • 2019-01-17
          • 1970-01-01
          • 2012-01-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多