我正在使用Mono 2.6.7 - 如果我没有指定域,则请求的主机被用于NTLM身份验证 - 这会导致登录失败。
1 - 工作:使用用户名“domainXYZ / User123”登录 - > Wireshark捕获NTLM包:
Domain name: domainXYZ
User name: User123
2 - 工作:使用网址http://1.2.3.4/a.txt上的用户名'User123'登录 - >的净/视窗:
Domain name: NULL
User name: User123
3 - 不工作:使用网址http://1.2.3.4/a.txt上的用户名“User123”登录 - >的单声道/ Debian的:
Domain name: 1.2.3.4
User name: User123
此身份验证请求无效,因为目标计算机上没有名为1.2.3.4的域。
我的无域信息验证代码:
NetworkCredential credential = new NetworkCredential(request.Username, request.Password);
// credential = new NetworkCredential(request.Username, request.Password, null); also not working
CredentialCache credentialCache = new CredentialCache { { new Uri(request.Url), "NTLM", credential } };
webClient.Credentials = credentialCache;
有什么想法吗?
答案 0 :(得分:1)
我们能够采用“简单”的解决方法来解决域名问题。通常,我们将连接实现为Objective-C中的“胖”静态库,为简单起见使用ASIHTTPRequest框架,按照here所述进行API绑定,并在here的帮助下,我们能够将创建的.dll和.a文件包含到MonoDevelop中并链接到所需的框架。
如果您对源文件感兴趣,请随时与我联系。 我也有一些更有趣的链接帮助了我们,但我需要更多的声誉来发布它们。另外,请随时问我他们。
此致 安德烈亚斯
编辑:抱歉,最重要的信息丢失了。将ASIHTTPRequest中的域设置为空字符串[asiRequest setDomain:@""];
并将整个请求包装在静态库中就可以了。
答案 1 :(得分:0)
我刚刚在Mono master和mono-2-10分支中解决了这个问题:https://github.com/mono/mono/commit/214741630f96ddd3e847ff4050182674fe2d1602