401,在 API 连接上使用 Blazor WASM + SignalR

问题描述 投票:0回答:1
  • 服务器 A 托管 Blazor WASM 应用程序。
  • 服务器 B 托管 API。
  • 所有身份验证均为 Windows 身份验证。

API 向 WASM 应用程序提供数据,一切按预期运行。但我尝试设置的从 WASM 到 API 的 SignalR 连接不起作用。 401 未经授权。

enter image description here

从 IIS 日志中,我可以得出结论,建立连接的协商 POST 请求不会发送用户凭据(精确的日志错误是 401 2 5)。但是在连接生成器中设置“UseDefaultCredentials = true”会引发“平台不受支持”异常。

连接设置代码:

connection = new HubConnectionBuilder()
    .WithUrl($"{Program.AppConfig["http:baseAddress"]}someURL", options =>
    {    
         //options.UseDefaultCredentials = true; <- throws
    }) 
    .AddJsonProtocol(options => 
    {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;   
        options.PayloadSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
        options.PayloadSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    })
    .ConfigureLogging(x => x.SetMinimumLevel(LogLevel.Trace))
    .Build();

设置或删除集线器 API 代码上的 [Authorize] 属性不会执行任何操作,因为 IIS 已经拒绝连接,而不是 API。

是否有任何方法可以发送凭据,或者 SignalR 是否打算不适用于 Blazor WASM 应用程序?如果是这样,还有其他选择吗?不记名令牌身份验证?它适用于 API 和应用程序在同一台机器上运行的开发环境。

我尝试设置不同的身份验证值,例如允许匿名。修改了 SignalR 连接的选项。

Google 无法提供有关该问题的简明结果。

c# asp.net-core signalr-hub
1个回答
0
投票

如果有人发现这个并有同样的问题,我无法正确修复它。相反,我使用 JavaScript-SignalR 建立连接,并使用 JSInterop 向 Blazor 应用程序提供数据。

我不确定这是否正确,但我读到 Blazor WASM 根本无法向 SignalR 提供用户凭据。这很奇怪,但符合我得到的 PlatformNotSupported 异常。

© www.soinside.com 2019 - 2024. All rights reserved.