2013-04-18 73 views
9

是否有人在C#中成功創建了自定義Windows憑據提供程序? Windows SDK中的示例都在C++中。我所做的一些初步搜索表明它可能是可能的,但似乎找不到任何人確認了它。Windows憑據提供程序與C#

+1

我不知道這是否從管理工作代碼與否。我質疑爲什麼你會希望*在託管代碼中編寫這個代碼,但它不會很難嘗試。您需要爲所有Win32函數編寫大量的P/Invoke定義。根據你對C++的瞭解,這可能會浪費你更多的時間,而不僅僅是用更合適的語言來編寫它。 –

回答

10

+1對於pgina。正如Cody所說,沒有託管API可用於創建憑證提供程序,並且如果要使用pInvoke路由,它可能需要更多的時間解決pInvoke問題,而不是找出憑證提供程序。

pGina可以幫助你的是它有一個很好的插件架構,插件是用託管代碼編寫的。見圖表here。 pGina處理與LogonUI(本機代碼)的通信,但依賴於插件(託管)來執行實際的身份驗證,這可能是您想要控制的(否則您可能不需要您自己的憑據提供程序)。

2

查看pGina。我一直在玩它,它似乎在我的Windows 8安裝上可以正常工作,所以它在此之前也可以在所有Windows版本上正常運行。儘管如此,它還處於相當早期的階段,而我無法看到創建自定義UI的任何方式,而無需深入研究項目的本地一半。希望這可以幫助!

[編輯]再次閱讀科迪格雷的評論。要清楚的是,pGina實際上只是爲您編寫的本地代碼。但是,是的,你可能會有更多的控制權在C++中編寫它,但如果你不需要太多的控制權,那麼pGina就是要走的路。

4

Windows Vista及更高版本中的新CredentialProvider模型基於COM。這意味着只要你實現了正確的COM接口,它就應該是可能的。

基於此,比以前的GINA模型更容易構建,因爲舊的GINA模塊使用DLL入口點和函數指針而不是COM接口。

鑑於.NET來互操作與COM,它應該是容易的能力:

  1. 構建ICredentialProvider接口的C#定義,並添加正確的COM用正確的GUIDS屬性
  2. 建設實現了ICredenitalProvider並被標記爲標記有ComVisible特性(真)憑據提供一流
  3. 註冊新的裝配與Regasm
  4. 添加正確的註冊表項與Windows註冊新CredentialProvider(軟件\微軟\的Windows \ CurrentVersion \認證\認證供應商)

如果你做了這一切,你將有一個工作的證書提供商,在C#編寫

相關問題