微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在控制台应用中托管了一个 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"); });
}

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。