Firefox NTLM凭证到localhost

时间:2013-08-01 22:20:23

标签: firefox authentication iis ntlm

我正在尝试设置一个可在我们公司内部网上运行的WebAPI Web服务和网站。我正在使用IIS来托管web服务(A)以及我的网站(B)。我网站上的一个页面就这样向Web服务发出请求:

var URL = 'http://MachineName:80/AWebService/api/GetGuid';
var request = new XMLHttpRequest();
request.open("GET", URL, false);
request.withCredentials = "true";
request.send();
var response = request.responseText;
return response;

WebService代码如下所示:

[EnableCors(origins: "http://localhost", headers: "*", methods: "*")]
public class StoneSoupController : ApiController
{
    [ActionName("GetGuid")]
    public HttpResponseMessage GetGuid()
    {
        var indenty = this.User.Identity;
        Guid g = Guid.NewGuid();

        HttpResponseMessage msg = new HttpResponseMessage();
        msg.Content = new StringContent(g.ToString());
        msg.Headers.Add("Access-Control-Allow-Origin", "http://localhost"); //tried with and without this
        msg.Headers.Add("Access-Control-Allow-Credentials", "true"); //tried with and without this
        return msg;

    }
}

如果我将IIS中的身份验证模式设置为匿名身份验证,则Web服务会按预期返回guid字符串。但是,我需要控制哪些用户能够访问Web服务上的某些方法,并希望使用他们的Windows凭据来执行此操作。

我的问题是我似乎无法让Firefox发送Windows凭据。我尝试在http://localhost中将network.automatic-ntlm-auth.trusted-uris包含在about-config的Firefox中,但这似乎没有任何效果。

我在IIS中启用了日志记录,这是它为请求记录的内容

2013-08-01 21:36:05 136.203.40.232 GET /AWebService/api/GetGuid - 80 - 136.203.40.232 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:17.0)+Gecko/20100101+Firefox/17.0 200 0 0 965

正如您所看到的,交易中没有用户ID。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

浏览器会在响应标头

时询问或自动发送用户凭据

WWW-Authenticate NTLM

第2步:

您需要将Web api的身份验证更改为Windows,并将authorize属性添加到操作或控制器

第3步: Firefox不会像IE发送一样发送凭据。你需要改变firefox设置 about:config中 将应用程序URL设置为此变量network.automatic-ntlm-auth.trusted-uris

答案 1 :(得分:0)

关于你对Giridhar的评论:
可能是IIS没有启用“HTTP keep-alive”。

  

启用HTTP Keep-Alives

     
      
  1. 在IIS管理器中,展开本地计算机,展开“网站”文件夹,右键单击该网站,然后单击“属性”。

  2.   
  3. 在“网站”选项卡上的“连接”部分中,单击“启用HTTP保持活动”复选框。

  4.   
  5. 单击“应用”,然后单击“确定”。

  6.   

(来自Microsoft