具有 Windows 身份验证的 Asp.Net Core SignalR (401)

问题描述 投票:0回答:2

我只是想让 SignalR 与 IIS 上的 Asp.Net Core 一起使用。它在本地运行得很好(当然),但是部署后我得到:

HttpRequestException:响应状态码不表示成功: 401(未经授权)。

这发生在

await hub.StartAsync();

被称为,在我的IIS中我有:

这是一个内联网站点,这是必需的。

I am currently initializing the Hubs like this:Hub = new HubConnectionBuilder()
    .WithUrl(navMan.ToAbsoluteUri(hubPath), options =>
    {
        options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
        options.UseDefaultCredentials = true;
    })
    .WithAutomaticReconnect()
    .Build();

此时,我已经改变了一切,我不知道哪条路是向上的。我想我的问题是:如何让它在 Asp.Net Core 环境中工作?能行吗?您还需要我来解决什么问题吗?谢谢你。

编辑:看起来是已知问题:https://github.com/dotnet/aspnetcore/issues/25000

asp.net-core iis signalr asp.net-core-5.0
2个回答
1
投票

在使用 Windows 身份验证构建 Blazor Server 聊天应用程序时也遇到了此异常。谷歌搜索了一下发现了这个ASP.NET Core SignalR 中的身份验证和授权 - Windows 身份验证

我添加了 NameUserIdProvider 类,将其添加到 Startup.cs 中,没有更多问题。


0
投票

我使用 .NET Framework 和自托管服务器,而不是 ASP.NET Core。我不确定这对于此类问题是否重要。

我尝试将我的网站设置为“受信任”,尝试使用和不使用 FQDN,并尝试添加 NameUserIdProvider。这些都不起作用。

对我来说,我发现防止 401 的唯一方法是通过 IP 地址而不是主机名进行连接。我也在使用 .NET 客户端,因此我能够使用以下内容仍然引用主机名,但将其转换为 IP 地址。

var hostEntry = Dns.GetHostEntry(hubMachineName);
var ipAddress = hostEntry.AddressList[0];

var url = $"http://{ipAddress}:8080/hubName";
© www.soinside.com 2019 - 2024. All rights reserved.