Поставщик учетных данных Windows с C#

Кто-нибудь успешно создал собственный поставщик учетных данных Windows на С#? Все примеры в Windows SDK написаны на C++. Некоторые первоначальные поиски, которые я провел, показывают, что это возможно, но не могу найти никого, кто подтвердил бы это.


person Paul Liebrand    schedule 18.04.2013    source источник
comment
Я не уверен, работает ли это из управляемого кода или нет. Я задаюсь вопросом, почему вы хотите написать это в управляемом коде, но это будет несложно попробовать. Вам нужно будет написать множество определений P/Invoke для всех функций Win32. В зависимости от ваших знаний C++, это может отнять у вас больше времени, чем простое написание на более подходящем языке для начала.   -  person Cody Gray    schedule 19.04.2013


Ответы (4)


+1 для pgina. Как говорит Коди, не существует управляемого API, который можно использовать для создания поставщика учетных данных, и если вы хотите пойти по маршруту pInvoke, вам, вероятно, потребуется больше времени на устранение неполадок pInvoke, чем на выяснение поставщика учетных данных.

В чем pGina может вам помочь, так это в том, что у нее хорошая архитектура плагинов, а сами плагины написаны на управляемом коде. См. диаграмму здесь. pGina обрабатывает связь с LogonUI (собственный код), но полагается на плагины (управляемые) для фактической аутентификации, что, вероятно, является тем, что вы хотите контролировать (в противном случае вам, вероятно, не понадобится ваш собственный поставщик учетных данных).

person rifaco    schedule 19.05.2013

Новая модель CredentialProvider в Windows Vista и более поздних версиях основана на COM. Это означает, что это возможно, если вы реализуете правильные COM-интерфейсы.

Исходя из этого, его должно быть проще построить, чем старую модель GINA, поскольку старый модуль GINA использовал точки входа DLL и указатели функций вместо COM-интерфейсов.

Учитывая способность .Net взаимодействовать с COM, это должно быть так же просто, как:

  1. Создание определения C# интерфейса ICredentialProvider и добавление правильных атрибутов COM с правильными GUIDS.
  2. Создание класса поставщика учетных данных, который реализует ICredenitalProvider и помечен как COMVisible(True)
  3. Регистрация новой сборки в Regasm
  4. Добавление правильных разделов реестра для регистрации вашего нового CredentialProvider в Windows (Software\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers)

Если вы сделаете все это, у вас будет работающий поставщик учетных данных, написанный на C#.

person mageos    schedule 06.05.2014

Проверьте pGina. Я поигрался с ним, и, кажется, он работает нормально в моей установке Windows 8, поэтому он должен хорошо работать и со всеми версиями Windows до этого. Тем не менее, он все еще находится на довольно ранней стадии, и я не вижу способа создать собственный пользовательский интерфейс без необходимости вникать в нативную половину проекта. Надеюсь это поможет!

[РЕДАКТИРОВАТЬ] Просто прочитайте комментарий Коди Грея еще раз. Чтобы было ясно, pGina — это просто нативный код, написанный для вас. Но да, у вас, вероятно, было бы больше контроля над написанием его на C++ для начала, но если вам не нужно слишком много контроля над тем, как оно представлено, тогда pGina - это то, что вам нужно.

person Curtis Jones    schedule 19.04.2013

Это возможно, поскольку поставщики учетных данных являются COM-объектами, а COM-объекты могут быть реализованы в управляемом коде.

См. в этом блоге некоторые детали и хорошая отправная точка. Репозиторий Github находится здесь.

person James Westgate    schedule 30.08.2020