Способ входа Настройка с использованием GINA - PullRequest
0 голосов
/ 07 февраля 2009

Я знаю, что нелегко найти мастера в GINA, но мой вопрос наиболее близок к Interprocess Communication (IPC), я написал свою собственную GINA на неуправляемом c ++, я включил в нее метод, который проверяет правильность отпечатка пальца для пользователь попытается войти в систему, эта функция вызовет некоторый метод в работающей системе Windows, написанной на c #, код выглядит следующим образом:

в GINA, неуправляемый c ++

if(Fingerprint.Validate(userName,finerprintTemplate)
{
    //perform login
}

в службе Windows, C #

public class Fingerprint
{
   public static bool Validate(string userName, byte[] finerprintTemplate)
   {
      //Preform Some code to validate fingerprintTemplate with userName
      //and retuen result
   }
}

Кто-нибудь знает, как сделать такое взаимодействие между GINA и службой Windows или просто между письменным сервисом c ++ и письменным сервисом C #.

Спасибо

Ответы [ 4 ]

4 голосов
/ 07 февраля 2009

Каноническим методом связи со службой (или большинством IPC, которым потенциально необходимо пересечь границу сеанса / рабочего стола) является именованный канал. Вы также можете использовать почтовые ящики, но вам придется иметь дело с проблемами дублирования, потому что сообщения почтовых ящиков дублируются по всем установленным протоколам, поэтому вам нужна какая-то система тегов ... становится немного грязно.

Посмотрите документы для CreateNamedPipe и проложите свой путь оттуда. Я говорил между C ++ и C #, используя каналы: взаимодействие получилось немного грязным (двоичные сообщения), но его выполнимо. Здесь приведен пример кода для труб C # (с обеих сторон) здесь .

Приятной особенностью использования канала для вашей конкретной службы для связи является то, что вы можете позже расширить дизайн для поддержки пользовательского интерфейса, если вам это нужно.

3 голосов
/ 07 февраля 2009

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

Обратите внимание, что в Windows Vista GINA устарела и заменена другим API под названием Архитектура поставщика учетных данных.

1 голос
/ 07 февраля 2009

Я настоятельно рекомендую использовать именованные каналы. Они быстрые, простые в использовании со стороны C #, при условии, что вы используете .Net 3.5 или выше, и относительно простые со стороны C ++ (доступно множество примеров). И самое главное, очень легко защитить с помощью простого дескриптора безопасности.

0 голосов
/ 21 июля 2009

Мне любопытно, если вы следовали предложенным «ответам» и пробовали маршрут Named Pipe? Согласно как этой ссылке , так и моему собственному опыту, GINA работает в контексте с предварительной аутентификацией (сеанс 0), и любая попытка получить доступ к именованному каналу из неуправляемой DLL-библиотеки GINA C ++ приведет к ошибке 5 отказано ".

Я полагаю, что почтовые слоты могут быть единственным доступным механизмом Windows IPC, который фактически доступен на этом уровне, но я даже не уверен, что он будет работать (не пробовал.)

...