web services - Soporte MonoTouch para acceder a Mono.Security.Protocol.Ntlm.NtlmFlags
web-services xamarin.ios (2)
La sesión NTLMv2 y la autenticación NTLMv2 ahora se han implementado en Mono ( mono / master commit 45745e5 ).
Vea este artículo para una descripción de las diferentes versiones de NTLM.
De forma predeterminada, Mono ahora usa Autenticación de sesión NTLMv2 cuando el servidor lo admite y vuelve a LM y NTLM de lo contrario.
El comportamiento predeterminado se puede configurar utilizando la nueva propiedad Mono.Security.Protocol.Ntlm.Type3Message.DefaultAuthLevel
en Mono.Security.dll
(vea Type3Message.cs y NtlmAuthLevel.cs en mcs/class/Mono.Security/Mono.Security.Protocol.Ntlm
).
Esto es similar al Nivel de Autenticación de Lan Manager en Windows.
Actualización 26/01/13
Ha habido un problema con Microsoft Server 2008 RC2 que no acepta el nombre de dominio que envió en el Nombre de destino del mensaje Tipo 2 (o Nombre de dominio del bloque Información de destino).
Por lo tanto, ahora estamos usando el nombre de dominio de NetworkCredential
para permitir al usuario especificar el dominio deseado. Este es también el nombre de dominio que inicialmente se envía al servidor en el mensaje de tipo 1.
Usamos autenticación NTLM para acceder a servicios web ASP.net desde nuestra aplicación MonoTouch y todo funciona bien.
Uno de nuestros clientes usa la misma aplicación y la autenticación NTLM falla desde nuestra aplicación, pero funciona desde el navegador Safari del iPad.
Al NTLMSSP_CHALLENGE
el flujo de paquetes del cliente, el servidor no devuelve NTLMSSP_CHALLENGE
, cuando nuestra aplicación envía el mensaje NTLMSSP_NEGOTIATE
.
Mirando las diferencias entre el mensaje NTLMSSP_NEGOTIATE
nuestra aplicación y el mismo mensaje Safari de iPad Nuestra aplicación MT establece los indicadores NTLM en 0xb203
y Safari lo establece en 0x88207
. La NegotiateNtlm2Key
está configurada en 0
en nuestra aplicación y 1
en Safari. Nuestra aplicación también envía los campos de nombre y dominio de la estación de trabajo llamante, mientras que Safari envía ambos como nulos.
El servidor del cliente es Windows Server 2003 y también usan Kerberos como su esquema de autenticación principal y recurren a NTLM.
¿ Mono.Security.Protocol.Ntlm.NtlmFlags
la configuración de los indicadores NegotiateNtlm2Key
en Mono.Security.Protocol.Ntlm.NtlmFlags
?
Simplemente poniendo banderas? Tal vez, pero en mi humilde opinión eso es bastante improbable.
Esa base de código fue escrita en 2003 (y actualizada en 2004) y estoy bastante seguro de que yo (como autor del código de bajo nivel) no tenía acceso a un servidor de Windows 2003 o un dominio habilitado para Kerberos en ese momento .
La cantidad de cambio requerido, para una reserva, puede no ser demasiado grande (pero no apostaría 5 $ en eso ;-) si ya tiene el entorno para probarlo. Estoy 100% seguro de que el proyecto Mono estaría encantado de recibir parches para permitir esto. También puede completar un informe de error (mejora de prioridad) para solicitar esta función en http://bugzilla.xamarin.com
Una alternativa es usar la API de iOS, que supongo que Safari está usando, para comunicarse con el servicio web ASP.NET y deserializar los datos usted mismo. Es difícil decir qué opciones son más complejas.