繁体   English   中英

ASP.Net Core 401中的SignalR未经授权

[英]SignalR in ASP.Net Core 401 Unauthorized

我的UWP应用程序遇到了一个小问题。 首先,UWP应用程序具有以下功能:

  • 企业认证
  • 共享用户证书
  • 专用网络
  • 用户帐户信息

现在我想连接到ASP.NET Core 2.1 Web API中的SignalR-Hub。 集线器如下所示:

 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; namespace Test.Namespace { [Authorize] public class SyncHub : Hub { public void SendUpdate() { Clients.All.SendAsync("Update"); } } } 

这是我的Startup.cs:

 using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Test.Namespace { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddSignalR(); services.AddSingleton<IUserIdProvider, NameUserIdProvider>(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.UseHttpsRedirection(); app.UseSignalR(routes => { routes.MapHub<SyncHub>("/syncHub"); }); app.UseMvc(); } } } 

整个API在配置了Windows身份验证的IIS上运行。 Active Directory在同一台计算机上运行。

这就是我的UWP应用程序调用服务的方式:

  HubConnection connection = new HubConnectionBuilder().WithUrl("http://Server:81/syncHub", options => { options.UseDefaultCredentials = true; }).Build(); await connection.StartAsync(); 

这个电话总是会抛出401。

我究竟做错了什么? 我在这个问题上工作了一个多星期了,我无法弄清楚它为什么不起作用。

感谢所有帮助我的人:)

编辑 :所以我今天尝试了一些,并发现,这不是SignalR本身的问题。我创建了一个具有完全相同调用的ASP.NET Core控制台应用程序,一切正常。 当我在UWP应用程序中对凭证进行硬编码时,它也有效。 当我在UWP中使用“UseDefaultCredentials”时它才起作用。 我完全无能为力。 我已经重新检查了这些功能,但这也无济于事。

看来app.UseHttpsRedirection(); 无法重定向客户端凭据。

尝试使用https url进行测试。

var hubConnectionBuilder = new HubConnectionBuilder();
var hubConnection = hubConnectionBuilder.WithUrl("https://localhost:44381/timeHub",options => {
    options.UseDefaultCredentials = true;
}).Build();
await hubConnection.StartAsync();

最后!

答案很难找到,但现在它正在运作! 根据这个网站: https//support.microsoft.com/en-us/help/303650/intranet-site-is-identified-as-an-internet-site-when-you-use-an-fqdn-o

该应用程序将该呼叫识别为对互联网的呼叫,因此不允许发送默认凭据。 我必须使用Internet Explorer手动将此页面添加到本地Intranet站点,而不是像魅力一样。

感谢所有帮助过我的人:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM