3

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

我们的一位客户使用相同的应用程序,并且 NTLM 身份验证在我们的应用程序中失败,但可以在 iPad 的 Safari 浏览器中运行。

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

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

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

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

4

2 回答 2

4

NTLMv2 会话和 NTLMv2 身份验证现已在 Mono 中实现(单声道/主提交 45745e5)。

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

默认情况下,Mono 现在在服务器支持时使用 NTLMv2 会话身份验证,否则将回退到 LM 和 NTLM。

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

这类似于 Windows 中的Lan Manager 身份验证级别

2013 年 1 月 26 日更新

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

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

于 2012-11-09T16:32:34.177 回答
1

简单地设置标志?也许但恕我直言,这不太可能。

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

如果您已经有环境来测试它,则备用所需的更改量可能不会太大(但我不会打赌 5 美元 ;-)。我 100% 肯定 Mono 项目会很高兴收到补丁来实现这一点。您还可以在http://bugzilla.xamarin.com填写错误报告(优先级增强)以请求此功能

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

于 2011-11-23T01:12:39.553 回答