iis 带有Windows身份验证的ASP.NET Core SignalR(401)

doinxwow  于 4个月前  发布在  Windows
关注(0)|答案(2)|浏览(49)

我只是想让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核心环境中工作?它可以工作吗?你还需要我来解决什么问题?谢谢。
编辑:看起来是一个已知的问题:https://github.com/dotnet/aspnetcore/issues/25000

1cosmwyk

1cosmwyk1#

在构建带有Windows身份验证的Blazor Server聊天应用程序时也遇到了这个异常。Google搜索了一下,在ASP.NET Core SignalR - Windows身份验证中找到了这个身份验证和授权。
我添加了NameUserIdProvider类,将其添加到Startup.cs,没有更多的问题。

bq3bfh9z

bq3bfh9z2#

我使用的是.NET框架和一个自托管服务器,而不是ASP.NET核心。我不确定这是否对这类问题有影响。
我尝试将我的站点设置为受信任,尝试使用和不使用SSL证书,并尝试添加NameUserIdProvider。当连接到另一台机器时,这些都不起作用。在本地,我可以使用“localhost”或我的本地主机名进行连接,使用和不使用SSL证书。即使在本地,我尝试修改我的主机文件以将“localhost2”指向127.0.0.1,但失败了。就像在真正的Active Directory实际传递凭据之前,有某种针对真正Active Directory的特殊验证。
对我来说,我发现防止401的唯一方法是通过IP地址而不是主机名连接。我也使用.NET客户端,所以我能够使用下面的代码仍然引用主机名,但将其转换为IP地址。

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

var url = $"http://{ipAddress}:8080/hubName";

字符串

相关问题