2013-04-18 10 views
9

Hat jemand erfolgreich einen benutzerdefinierten Windows Credential Provider in C# erstellt? Die Beispiele, die sich in dem Windows SDK befinden, befinden sich alle in C++. Eine erste Suche, die ich gemacht habe, zeigt, dass es möglich ist, aber ich kann niemanden finden, der es bestätigt hat.Windows Credential Provider mit C#

+1

Ich bin mir nicht sicher, ob dies aus verwaltet funktioniert Code oder nicht. Ich frage mich, warum Sie dies in verwaltetem Code schreiben möchten, aber es wäre nicht schwer, es zu versuchen. Sie müssen viele P/Invoke-Definitionen für alle Win32-Funktionen schreiben. Abhängig von Ihren C++ - Kenntnissen könnte das mehr Zeit kosten, als wenn Sie es zunächst in eine passendere Sprache schreiben. –

Antwort

10

+1 für pgina. Wie Cody sagt, gibt es keine verwaltete API, die Sie verwenden können, um einen Credential Provider zu erstellen. Wenn Sie die pInvoke-Route verwenden möchten, wird es wahrscheinlich länger dauern, pInvoke-Probleme zu beheben, als den Credential Provider herauszufinden.

Wo pGina Ihnen helfen kann ist, dass es eine schöne Plugin-Architektur hat und die Plugins in verwaltetem Code geschrieben sind. Siehe Diagramm here. pGina kümmert sich um die Kommunikation mit LogonUI (systemeigener Code), benötigt aber die Plugins (verwaltet), um die eigentliche Authentifizierung durchzuführen. Dies ist wahrscheinlich das, was Sie steuern möchten (ansonsten würden Sie wahrscheinlich keinen eigenen Anmeldeprovider benötigen).

2

Auschecken pGina. Ich habe damit herumgespielt und es scheint auf meiner Windows 8-Installation gut zu funktionieren, also sollte es auch vorher mit allen Windows-Versionen funktionieren. Es ist jedoch immer noch in ziemlich frühen Stadien und ich sehe keine Möglichkeit, eine benutzerdefinierte Benutzeroberfläche zu erstellen, ohne sich in die native Hälfte des Projekts vertiefen zu müssen. Hoffe das hilft!

[EDIT] Lesen Sie Cody Greys Kommentar noch einmal. Um es klarzustellen, pGina ist wirklich nur der für Sie geschriebene Code. Aber yeah, du hättest wahrscheinlich mehr Kontrolle, um es in C++ zu schreiben, aber wenn du nicht zu viel Kontrolle darüber brauchst, wie es dargestellt wird, dann ist pGina der richtige Weg.

4

Das neue CredentialProvider-Modell in Windows Vista und höher basiert auf COM. Dies bedeutet, dass es möglich sein sollte, solange Sie die richtigen COM-Schnittstellen implementieren.

Darauf basierend sollte es einfacher zu erstellen sein als das ältere GINA-Modell, da das ältere GINA-Modul DLL-Eingangspunkte und Funktionszeiger anstelle von COM-Schnittstellen verwendet hat.

die Fähigkeit, für .Net zu inter arbeitet mit COM gegeben, sollte es so einfach sein wie:

  1. eine C# Definition des ICredentialProvider Schnittstelle Des Aufbau und das Hinzufügen der richtigen COM-Attribut mit der richtigen GUIDS
  2. einen Berechtigungsnachweis Provider-Klasse Gebäude, das die ICredenitalProvider implementiert und wird als ComVisible (True)
  3. mit Regasm
  4. Hinzufügen der korrekten Registrierungsschlüssel registrieren der neuen Montage markiert Ihren neuen CredentialProvider mit dem Windows registriert (Software \ Microsoft \ Windows \ Currentversion \ Authentication \ Credential Provider)

Wenn Sie all das tun, haben Sie eine funktionierende Credential Provider, geschrieben in C#

Verwandte Themen