MonoTouch支持访问Mono.Security.Protocol.Ntlm.NtlmFlags

时间:2011-11-22 23:03:01

标签: web-services mono xamarin.ios ntlm ntlmv2

我们使用NTLM auth从我们的MonoTouch应用程序访问ASP.net Web服务,一切正常。

我们的一位客户使用相同的应用程序,NTLM auth从我们的应用程序失败,但可以在iPad的Safari浏览器中使用。

查看来自客户的数据包流,当我们的应用发送NTLMSSP_CHALLENGE消息时,服务器不会返回NTLMSSP_NEGOTIATE

查看我们的应用NTLMSSP_NEGOTIATE消息与iPad的Safari相同消息之间的差异 我们的MT应用程序将NTLM标志设置为0xb203,Safari将其设置为0x88207NegotiateNtlm2Key在我们的应用中设为0,在Safari中设为1 我们的应用程序还发送呼叫工作站域和名称字段,而Safari将两者都发送为空。

客户端的服务器是Windows Server 2003,他们也使用Kerberos作为主要的身份验证方案,并使用NTLM。

NegotiateNtlm2Key中设置Mono.Security.Protocol.Ntlm.NtlmFlags标志会有帮助吗?

2 个答案:

答案 0 :(得分:4)

NTLMv2会话和NTLMv2身份验证现已在Mono(mono/master commit 45745e5)中实现。

有关不同NTLM版本的说明,请参阅this article

默认情况下,只要服务器支持,Mono就会使用NTLMv2会话身份验证,然后再回到LM&否则就是NTLM。

可以使用Mono.Security.Protocol.Ntlm.Type3Message.DefaultAuthLevel中的新Mono.Security.dll属性配置默认行为(请参阅mcs/class/Mono.Security/Mono.Security.Protocol.Ntlm中的Type3Message.csNtlmAuthLevel.cs)。

这类似于Windows中的Lan Manager Authentication Level

2013年1月26日更新

Microsoft Server 2008 RC2存在一个问题,即它不接受它在Type 2消息的目标名称(或目标信息块中的域名)中发回的域名。

因此,我们现在使用NetworkCredential中的域名来允许用户指定所需的域。这也是最初在Type 1消息中发送到服务器的域名。

答案 1 :(得分:1)

只需设置标志?也许但恕我直言,相当不太可能。

该代码库是在2003年编写的(并在2004年更新),我很确定我(作为低级代码的作者)无法访问Windows 2003服务器或启用Kerberos的域那个时候。

所需的更改量,对于后备,可能不会太大(但如果您已经拥有测试环境,我不会打赌5美元;-)我100%肯定Mono项目很乐意接收补丁来实现这一目标。您还可以在http://bugzilla.xamarin.com

处填写错误报告(优先级提升)以询问此功能

另一种方法是使用我认为Safari正在使用的iOS API与ASP.NET Web服务进行通信并自行反序列化数据。很难说哪个选项更复杂。