Как получить сеансовый ключ SPNEGO/Kerberos и реализовать HTTP-аутентификацию: договориться на моем собственном клиенте

Недавно я столкнулся с новым методом аутентификации, о котором я понятия не имел. Немного прочитав и изучив, чтобы понять это, я понял, что это как-то связано со SPNEGO, или, может быть, это просто spnego.

Я использую Windows XP в большой сети, когда мой браузер открывается, он автоматически подключается к веб-службе в сети, которая требует аутентификации:

HTTP/1.1 401 Несанкционированная WWW-аутентификация: согласование

тогда мой браузер отправляет автоматически (вместе с дополнительными заголовками, конечно):

Авторизация: согласование (зашифрованная строка).

Я пришел к выводу, что это рукопожатие использует протокол SPNEGO.

Что мне нужно сделать, так это создать свой собственный клиент (на самом деле это бот, который использует этот веб-сервис, требующий этой аутентификации). Мне нужно получить эту зашифрованную строку (точно так же, как ее получает мой браузер, возможно, используя какой-то протокол SPNEGO) без какого-либо взаимодействия с пользователем (опять же, как мой браузер).

дело в том, что у меня нет достаточно времени, чтобы изучить протокол spnego и как его реализовать.

Я использую c/c++, но если у меня нет опции, c# тоже подойдет. Есть ли какие-либо функции/классы/коды или, может быть, даже хорошие учебники, которые помогут мне реализовать это в ближайшее время?


person imfontofspnego    schedule 22.09.2011    source источник
comment
Почему бы просто не использовать WinINET для отправки HTTP-запроса? Он автоматически обрабатывает запрос аутентификации.   -  person EricLaw    schedule 20.05.2013


Ответы (1)


curl работает с Kerberos/spnego. Я не уверен, насколько хорошо эта функция работает в Windows, вы должны попробовать и посмотреть. Он достаточно хорошо работает в Linux. Вы можете посмотреть в источнике, чтобы увидеть, как это делается.

person n. 1.8e9-where's-my-share m.    schedule 22.09.2011
comment
Вы когда-нибудь проверяли это? Это не работает. Он утверждает, что поддерживает его, но код является вкладом и не проверен мейнтейнерами. Мне не повезло с этим. Я бы считал его сломанным! - person Michael-O; 31.10.2011
comment
Да, я действительно проверял это не раз. Он работает в продукте, который я разрабатываю, поэтому я более или менее знаком с его функциональностью. Есть баги, но в основном работает. Какие проблемы у вас с ним? Вы пробовали curl из командной строки? С какими аргументами? - person n. 1.8e9-where's-my-share m.; 31.10.2011
comment
Я просто не смог скомпилировать fbopenssl с cURL. Ненастроенный скрипт и дрянной makefile. Даже те ребята из списка рассылки понятия не имели, потому что это вклад. - person Michael-O; 31.10.2011
comment
Я не уверен, почему вы не смогли его скомпилировать. У меня компилируется из коробки на нескольких разновидностях линукса (с предупреждениями, но они безвредны). Это не вершина разработки программного обеспечения, но это работает. - person n. 1.8e9-where's-my-share m.; 31.10.2011
comment
Вам нужно установить пакет разработки OpenSSL, чтобы скомпилировать fbopenssl. Если вы скажете мне, какие ошибки компиляции вы получаете, я мог бы помочь вам. - person n. 1.8e9-where's-my-share m.; 31.10.2011
comment
После вашего ответа я попытался снова скомпилировать все на FreeBSD. После нескольких модов makefile FBOpenSSL все скомпилировалось хорошо. Теперь curl не обрабатывает токен SPNEGO. Я вижу, что билет запрошен и доступен в klist, но он все еще не работает: * gss_init_sec_context() failed: : unknown mech-code 51183616 for mech unknowngss_init_sec_context() failed: : No error: 0(WWW-Authenticate: Negotiate Subversion с libneon работает отлично, поэтому Kerberos работает как надо. Я больше ничего не знаю. - person Michael-O; 02.11.2011
comment
Вероятно, это проблема конфигурации. У вас есть MIT Kerberos или Heimdal? Я думаю, что эта ошибка появляется с Heimdal, но лично я никогда ее не видел. Я всегда работаю с MIT. Я могу попытаться решить вашу проблему, но не гарантирую, так как у меня нет опыта работы с Heimdal. Хотите попробовать? - person n. 1.8e9-where's-my-share m.; 02.11.2011
comment
Да, Heimdal по умолчанию используется во FreeBSD. Я знаю, что с моей настройкой Kerberos все в порядке, потому что Subversion отлично работает с libneon и SPNEGO. Я был бы очень признателен за помощь. - person Michael-O; 03.11.2011
comment
Хорошо, покажи свой /etc/krb5.conf, вывод klist и curl -v -u : your-url, я посмотрю. Кстати, вот что выводит мой curl: pastebin.com/hACpEb36 (вывод усечен, настоящее имя хоста и IP удалены) - person n. 1.8e9-where's-my-share m.; 03.11.2011
comment
Хе-хе, я тоже не читал TFM. Потратил на это несколько часов. - person n. 1.8e9-where's-my-share m.; 03.11.2011
comment
В любом случае, это действительно сбивает с толку и должно быть исправлено. Могли бы избавить нас от потраченного впустую времени. Кстати, FBOpenSSL очень старый и был написан, когда не было поддержки SPNEGO в MIT или Heimdal. Прямо сейчас, но сделайте это изначально в соответствии с их документами. Если появится свободное время, я перепишу cURL с моими скромными знаниями C и буду полагаться только на GSS-API. FBOpenSSL имеет сломанный Makefile и не настраивает скрипт. Действительно архаично. - person Michael-O; 03.11.2011