Поддержка MonoTouch для доступа к Mono.Security.Protocol.Ntlm.NtlmFlags - PullRequest
3 голосов
/ 23 ноября 2011

Мы используем NTLM-аутентификацию для доступа к веб-службам ASP.net из нашего приложения MonoTouch, и все работает нормально.

Один из наших клиентов использует то же приложение, и аутентификация NTLM не выполняется из нашего приложения, но работает из браузера Safari на iPad.

Глядя на поток пакетов от клиента, сервер не возвращает NTLMSSP_CHALLENGE, когда наше приложение отправляет сообщение NTLMSSP_NEGOTIATE.

Поиск различий между сообщением NTLMSSP_NEGOTIATE нашего приложения и аналогичным сообщением Safari для iPad Наше приложение MT устанавливает для флагов NTLM значение 0xb203, а Safari - для 0x88207. NegotiateNtlm2Key установлено в 0 в нашем приложении и 1 в Safari Наше приложение также отправляет домен и имя вызывающей рабочей станции, в то время как Safari отправляет оба как ноль.

Сервером клиента является Windows Server 2003, и они также используют Kerberos в качестве основной схемы аутентификации и используют NTLM.

Поможет ли установка флагов NegotiateNtlm2Key в Mono.Security.Protocol.Ntlm.NtlmFlags?

Ответы [ 2 ]

4 голосов
/ 09 ноября 2012

Сеанс NTLMv2 и аутентификация NTLMv2 теперь реализованы в Mono ( моно / мастер фиксации 45745e5 ).

См. эту статью для описания различных версий NTLM.

По умолчанию Mono теперь использует аутентификацию сеанса NTLMv2 всякий раз, когда сервер поддерживает ее, и в противном случае возвращается к LM & NTLM.

Поведение по умолчанию можно настроить с помощью нового свойства Mono.Security.Protocol.Ntlm.Type3Message.DefaultAuthLevel в Mono.Security.dll (см. Type3Message.cs и NtlmAuthLevel.cs в mcs/class/Mono.Security/Mono.Security.Protocol.Ntlm).

Это похоже на Уровень аутентификации Lan Manager в Windows.

Обновление 01/26/13

Была проблема с Microsoft Server 2008 RC2, не принимающей доменное имя, которое оно отправило обратно в Целевое имя сообщения типа 2 (или Имя домена из блока Целевая информация).

Таким образом, теперь мы используем имя домена из NetworkCredential, чтобы пользователь мог указать нужный домен. Это также доменное имя, которое первоначально отправляется на сервер в сообщении типа 1.

1 голос
/ 23 ноября 2011

Просто установить флаги? Возможно, но ИМХО, это вполне маловероятно.

Эта кодовая база была написана в 2003 году (и обновлена ​​в 2004 году), и я почти уверен, что у меня (как автора низкоуровневого кода) не было доступа к серверу Windows 2003 или домену с поддержкой Kerberos в то время.

Сумма требуемого изменения, для запасного варианта, может не быть слишком большой (но я бы не стал ставить 5 $ на это ;-), если у вас уже есть среда для ее тестирования. Я на 100% уверен, что проект Mono был бы счастлив получить патчи для включения этого. Вы также можете заполнить отчет об ошибке (повышение приоритета), чтобы запросить эту функцию на http://bugzilla.xamarin.com

Альтернативой является использование API-интерфейса iOS, который, как я предполагаю, использует Safari, для взаимодействия с веб-сервисом ASP.NET и десериализации данных самостоятельно. Трудно сказать, какие варианты сложнее.

...