单声道,NTLM和空域

时间:2011-09-08 13:13:36

标签: c# mono ntlm

我正在使用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;

有什么想法吗?

2 个答案:

答案 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