Mat*_*att 5 javascript c# iis jquery cross-domain
我想将NTLM凭据传递到远程Web服务。
我从rm1.domain.comJava脚本加载页面,并在其Javascript rm2.domain.com中调用了Web服务。
我希望所调用的Web服务能够读取进行调用的用户的NTLM凭据,但是我遇到了一些问题。
方案A(无效)
如果我的配置文件中包含以下内容:
<webHttpEndpoint>
<standardEndpoint name=""
automaticFormatSelectionEnabled="true"
crossDomainScriptAccessEnabled="true">
<security>
<transport clientCredentialType="Ntlm"></transport>
</security>
</standardEndpoint>
</webHttpEndpoint>
Run Code Online (Sandbox Code Playgroud)
并且仅在IIS中启用了Windows身份验证,我得到了预期的结果:

方案B(无效)
我的配置文件中包含以下内容
<webHttpEndpoint>
<standardEndpoint name="" automaticFormatSelectionEnabled="true">
<security>
<transport clientCredentialType="Ntlm"></transport>
</security>
</standardEndpoint>
</webHttpEndpoint>
Run Code Online (Sandbox Code Playgroud)
以及我的JavaScript中的以下内容:
jQuery.ajax({
url: "http://rm2.domain.com/getInfo?name=bobsyouruncle,
dataType: "json",
async: false,
success: function(data) {
console.log('woot');
},
error: function(ex) {
console.log(ex);
}
});
Run Code Online (Sandbox Code Playgroud)
并且仅在IIS中启用Windows身份验证,浏览器才会抛出:
http://rm1不被访问控制允许来源允许的。的jquery-1.10.1.min.js:6如果我将JavaScript更改为JSONP,那么我也将一无所获,但这也并不意外,因为我从web.config中删除了crossDomainScriptAccessEnabled =“ true”。但是,正如您在场景C中所看到的,您不能启用启用了身份验证方案的crossDomainScriptAccessEnabled =“ true”。
方案C(不会通过凭据)
如果mr2的Web服务的web.config类似于场景B,则启用了IIS匿名身份验证(并且禁用了Windows身份验证),并且jQuery的请求是JSONp,则该服务将返回数据,但不会传递身份验证信息。
底线(TL; DR) 是否有一种方法可以将我的Web服务保持为IIS匿名,并在其web.config中带有跨域标签,从浏览器传递域(NTLM)凭据,并在我的后台代码中解析它们我的网络服务。
文档和大量选项令人不知所措。
看看这个,其中有一些关于 NTLM 和模拟的使用的有趣观点。
我知道您的问题不是 WCF 特有的,但其中一些观点与您的场景完全相关。
最后一条评论说“authenticationScheme 和 proxyAuthenticationScheme 到“Ntlm”对您来说很有趣。