Аутентификация через SSPI + Kerberos

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by redowlet, 31 Jan 2013.

  1. redowlet

    redowlet New Member

    Joined:
    29 Jan 2013
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Всем привет!

    Мне требуется написать утилиту под WinCE6.0, которая будет проверять
    данные подключающихся пользователей и определять в какие группы
    пользователей домена они входят.

    На данный момент:
    Создан на С++ пример аутентификации по имени пользователя, паролю, домену,
    который использует SSPI и опробован под WinCE6.0 и WinXP.
    Пример основан на http://forum.antichat.ru/thread34361.html

    1. При использовании протокола NTLM все работает и на WinCE и на WinXP

    2. При использовании Kerberos:

    a) под WinCE функция AcceptSecurityContext(...) возвращает код ошибки
    0х8009030E ("No credentials are available in the security package.")
    В книге Рихтера (http://c2p.ru/cpp/ri...ndows-2000.html)
    этот код ошибки переведен как "Реквизиты недоступны".

    под WinXP функция AcceptSecurityContext(...) возвращает код ошибки
    0х8009030C ("The logon attempt failed.")
    В книге Рихтера этот код ошибки переведен как "Предоставивший полномочия
    субъект не может быть зарегистрирован, так как не обладает нужными реквизитами".

    То что в операционке WinCE6.0 и WinXP в принципе работает Kerberos я проверял
    с помощью команды "net use ..." (подключался к серверу Win2003 на котором разрешена
    аутентификация только через Kerberos).

    Возможно требуется какое-то шаманство с параметром ContextReq
    функций InitializeSecurityContext, AcceptSecurityContext. Я даже пытался
    подобрать перебором, но не удачно!

    Кто-то может уже сталкивался с такими ошибками и знает что они реально обозначают?

    Может кто знает чем отличается реализация аутентификации через SSPI + NTLM от SSPI + Kerberos?

    Ну может кому-то известны исходники в которых используется аутентификация SSPI + Kerberos?
    Например, кто знает где можно найти исходники стандартной програмки "net.exe"?

    Вообщем если у вас есть какие-либо соображения по этому поводу, то я буду
    благодарен вам за любую помощь.
     
  2. redowlet

    redowlet New Member

    Joined:
    29 Jan 2013
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Немного продвинулся в аутентификации через Kerberos...
    Стала проходить аутентификация в WinXP в пределах одного домена. Т.е. можно проверить имя пользователя, пароль, домен в том случае если запуск тестовой программки производится под учетной записью (пользователем) из данного домена. Если запускать не из этого домена, то "под WinXP функция AcceptSecurityContext(...) возвращает код ошибки 0х8009030C ("The logon attempt failed.")"

    Добился этого "прорыва" экспериментируя с параметрами ulASCContextReq и ulISCContextReq соответственно функций AcceptSecurityContext и InitializeSecurityContext.
    Дополнительно стал указывать в параметре szTargetName функции InitializeSecurityContext имя пользователя из под которого запускается тестовая программа. Само описание данного параметра весьма путанное. Мне так и не удалось понять, что необходимо указывать в параметре szTargetName при проведении аутентификации из одного домена в другой.

    Да вот еще что! Я уже понял, что для проверки имени, пароля и домена достаточно правильно вызвать функцию AcquireCredentialsHandle, но проблема в том, что мне требуется так же узнать в какую группу пользователей домена входит проверяемый пользователь. А это как я понял можно сделать только полностью создав контекст. Если посмотреть на функцию GetUserAndGroupInfo, то понятно как я получаю список групп проверяемого пользователя. Эта конструкция проверена под WinCE6.0 при использовании NTLM . Функция закомментирована, так как не компилируется в WinXP.

    На данный момент я нашел четыре варианта примеров аутентификации SSPI. Все они проверены в WinXP и работаю исправно только в случае использования NTLM.

    К сожалению не понял как прикрепить исходники к сообщению.