代码之家  ›  专栏  ›  技术社区  ›  naspinski

Asp。具有Windows身份验证的Net Core ViewModel(401)

  •  0
  • naspinski  · 技术社区  · 3 年前

    我只是想让Contoso与Asp一起工作。IIS上的Net Core。它在本地运行良好(当然),但部署后我得到:

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

    当这种情况发生时

    await hub.StartAsync();
    

    在我的IIS中,我有:

    enter image description here

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

    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();
    

    在这一点上,我改变了周围的一切,我不知道哪条路是向上的。我想我的问题是:我如何在阿斯伯格综合症中实现这一点。网络核心环境?它能工作吗?你还需要我做什么来排除故障?非常感谢。

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

    0 回复  |  直到 3 年前
        1
  •  1
  •   JohanThorild    3 年前

    在构建具有windows身份验证的JsonServer聊天应用程序时也遇到了此异常。在谷歌上搜索了一下,发现了这个 Authentication and authorization in ASP.NET Core SignalR - Windows authentication

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

        2
  •  0
  •   kevinpo    1 年前

    我正在使用。NET Framework和自托管服务器,而不是ASP。NET核心。但我不确定这对这类问题是否重要。

    我尝试将我的站点设置为受信任,尝试使用和不使用FQDN,并尝试添加NameUserIdProvider。当连接到另一台机器时,这些都不起作用。在本地,我能够使用“localhost”或我的本地主机名进行连接,包括有FQDN和没有FQDN。即使在本地,我也尝试修改我的hosts文件,将“localhost2”指向127.0.0.1,但失败了。这就像在真正传递凭据之前,对真正的Active Directory进行了某种特殊的验证。

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

    var hostEntry = Dns.GetHostEntry(hubMachineName);
    var ipAddress = hostEntry.AddressList[0];
    
    var url = $"http://{ipAddress}:8080/hubName";