托管在 Kestrel (AspNet Core 5.0) 中的 SignalR 服务的 Windows 身份验证

时间:2021-07-29 12:05:06

标签: c# asp.net-core signalr signalr-hub kestrel-http-server

我在控制台应用中托管了一个 SignalR(AspNet Core 5.0),使用 Kestrel 作为网络主机。

我想在 Hub 实现中访问任何请求的用户身份,当访问以下身份时,身份值为 NULL。

我查看了 MSDN 上的可用文档并进行了以下更改,但没有按预期填充 Identity,也没有在任何地方找到任何适用于 AspNet Core 5.0 的示例。

知道我做错了什么吗?

public class ExampleHub : Hub
{
   public Task Foo()
   {
      *// why is name NULL?*
      var name = Context.User.Identity.Name;
              
      return Task.Completed;
   }
}

我在将服务配置为 StartUp 时添加了以下行:

public void ConfigureServices(IServiceCollection services)
{
   services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNeogtiate();
   services.AddSignalR(options => options.EnableDetailedErrors = true);
   ...
}

public void Configure(IApplicationBuuilder app, IWebHostEnvironment env)
{
   app.UseRouting();
   app.UseAuthentication();

   app.UseEndpoints(endpoints => endpoints.MapHub<ExampleHub>("/Example"); });
}

1 个答案:

答案 0 :(得分:0)

通过更改为 HttpSys 而不是 Kestrel 作为主机,设法使其正常工作。 Context.User.Identity 现在填充为 WindowsIdentity

在这种情况下,首选使用 HttpSys - 托管在 Windows 服务中的内部(公司)网络,而不是 Web 服务器 (IIS)。注意 IIS 也在内部使用 HttpSys。

相关问题