【发布时间】: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