#c# #asp.net #authentication #ntlm
#c# #asp.net #аутентификация #ntlm
Вопрос:
Я работаю над заменой интегрированной проверки подлинности Windows в ASP.NET приложение, обрабатывая аутентификацию NTLM вручную. Аутентификация NTLM не является проблемой, у меня есть полная реализация модуля NTLM SSPI с открытым исходным кодом (https://github.com/FreeRDP/FreeRDP/tree/master/winpr/libwinpr/sspi/NTLM ). Моя основная проблема связана с тем фактом, что NTLM ориентирован на подключение, в то время как HTTP обычно не имеет состояния. После прочтения об аутентификации NTLM, она описана как требующая использования HTTP Keep-Alive, где cookie не отправляется с каждым запросом. Пока соединение поддерживается активным, состояние аутентификации NTLM остается.
Я нашел способы правильно включить HTTP keep-alive в IIS, но я не нашел способа ASP.NET чтобы связать данные с определенным соединением. Даже если файл cookie может быть передан клиенту в конце NTLM, NTLM не может быть завершено, если состояние сеанса не поддерживается между получением ЗАПРОСА NTLM и отправкой сообщения аутентификации NTLM. Очевидно, что при использовании встроенной встроенной поддержки IIS для проверки подлинности Windows он способен отслеживать состояние между несколькими этапами проверки подлинности NTLM.
То, что я ищу, — это способ отслеживать несколько запросов, поступающих для одного и того же HTTP-соединения, которое поддерживается в рабочем состоянии. Данные в HttpRequest, по-видимому, относятся только к текущему запросу, и ничто не позволяет мне идентифицировать соединение. В лучшем случае, может быть, одна из переменных сервера (http://msdn.microsoft.com/en-us/library/ms524602.aspx ), как и эфемерный порт соединения, может использоваться для идентификации одного и того же соединения. Это потенциально может сработать, но я не смог найти способ надежно определить, когда связанное соединение закрыто.
Идеи, кто-нибудь?
Ответ №1:
Нет такого способа узнать, находится ли текущий запрос в новом tcp-соединении или повторно используется соединение.
Это можно сделать, отправив дополнительный заголовок для определения текущего tcp-соединения в заголовке http.
Комментарии:
1. Похоже, это так, но тогда как это делается с помощью встроенной встроенной поддержки проверки подлинности Windows? Он может работать без сеансового cookie.
2. Проверка подлинности NLTM через HTTP требует сохранения соединения. В ASP.NET , по-прежнему не уверен, поступает ли текущий запрос от одного и того же соединения (если одновременно имеется больше соединений).