【问题标题】:MonoTouch support for accessing Mono.Security.Protocol.Ntlm.NtlmFlagsMonoTouch 支持访问 Mono.Security.Protocol.Ntlm.NtlmFlags
【发布时间】:2012-01-04 07:53:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢塞巴斯蒂安。将尝试与客户交谈,以了解如何为此创建复制品。我没有启用 Kerberos 的域设置。将打开一个错误并添加我拥有的数据。希望其他人可以进行测试设置。
    【解决方案2】:

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

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

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

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

    这类似于 Windows 中的Lan Manager Authentication Level

    2013 年 1 月 26 日更新

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

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

    【讨论】:

    • 非常感谢您添加此 Martin。我试用了具有此修复程序的 MonoTouch 6.0.8,但它破坏了我当前的 Windows 2008 R2 服务器的身份验证,该服务器在 MT 6.0.6 中工作。如果您需要,我可以通过电子邮件向您发送一个小型 MonoTouch 程序来重现此问题。
    • 我通过电子邮件向 Xamarin 支持中心发送了一个测试项目来重现此问题。
    • 好的,我去看看。
    • 抱歉,花了这么长时间 - 这周遇到了一些烦人的电脑问题 :-( 我终于解决了这个问题,很快就会提交。
    • 问题是您的服务器接受任何随机字符串作为Type3Message 中的域名 - 除了它在Type2Messages 目标名称中发回的那个(与域名相同目标信息中的字段)。这真的很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多