【问题标题】:SignalR asks for authentication credentials with 401SignalR 使用 401 请求身份验证凭据
【发布时间】:2015-12-08 21:17:25
【问题描述】:

我有一个带有 MVC、Web API 和 SignalR 并使用 Windows 身份验证的 .Net 4.5 网站。在我将集线器添加到我的 HTML 之前,一切都运行良好:

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

有了这条线,大约有 1/3 的时间在我按 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 集线器。我现在要做的就是加载集线器 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,它会起作用。什么?

【问题讨论】:

    标签: c# asp.net signalr ntlm http-status-code-401


    【解决方案1】:

    fiddler 似乎无法协商身份验证。我的猜测是动态代理需要根据您的 web.config 进行身份验证。

    最简单的解决方案是在作曲家的选项选项卡下打开提琴手自动身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2014-07-08
      • 1970-01-01
      • 2013-09-22
      • 2019-04-07
      • 1970-01-01
      • 2015-11-06
      相关资源
      最近更新 更多