SignalR要求401提供身份验证凭据

本文关键字:身份验证 要求 SignalR | 更新日期: 2023-09-27 18:26:13

我有一个.Net 4.5网站,该网站使用MVC、Web API和SignalR,并使用Windows身份验证。一切都很好,直到我用将集线器添加到我的HTML中

@Scripts.Render("~/signalr/hubs")

有了这一行,大约有三分之一的时间,当我点击F5刷新页面时,在页面加载之前,我会得到用户名/密码提示。这有时只影响集线器,有时影响某些MVC视图,有时影响整个页面。我的Startup.cs:中有这个

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(NtlmAuthenticationDefaults.AuthenticationType);
        app.UseNtlmAuthentication();
        app.MapSignalR(new HubConfiguration()
        {
            EnableDetailedErrors = true,
            EnableJSONP = true
        });
    }
}

web.config:中

<authentication mode="Windows" />
<authorization>
    <deny users="?" />
</authorization>

我在Fiddler中注意到请求hubs.js有一个Authorization: Negotiate ...头。紧接着是第二个请求,也是针对hub.js的请求,带有Authorization: Negotiate ...,但散列不同。

有人知道为什么会发生这种情况以及如何解决吗?可根据要求提供其他诊断信息。请注意,我实际上并没有连接到SignalR集线器。在这一点上,我所做的就是加载hubs JS。

  • 信号R:2.2.0
  • Microsoft.Owin.Host.SystemWeb:3.0.1
  • Pysco68.Owin.Authentication.Ntlm:1.0.2

这似乎只发生在Chrome上。到目前为止,IE的工作非常完美。

编辑:当我关闭Fiddler时,问题就完全消失了所以现在的问题是:为什么MVC、SignalR和Fiddler的组合会破坏Ntlm?如果我拆下轮毂,它就能工作。如果我关闭Fiddler,它会起作用。什么

SignalR要求401提供身份验证凭据

看起来fiddler未能协商身份验证。我的猜测是,动态代理需要基于你的web.config进行身份验证。

最简单的解决方案是在composer的选项选项卡下启用fiddlers Automatically Authenticate。