我们在Web API(netcoreapp2.2)中使用ASPNETCore.SignalR 1.1.0。
身份验证:我们正在为我们的项目使用IdentityServer4身份验证。
Startup.cs
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://IdentityServerDomainURL:8081/";
options.RequireHttpsMetadata = false;
options.ApiName = "name";
options.ApiSecret = "secret";
});
在WebAPI应用程序中,我们添加了SignalR Hub。JavaScript客户端连接到该集线器。以下是用于连接到集线器的JS客户端代码。
var connection = new signalR.HubConnectionBuilder()
.withUrl("http://localhost:52177/SignalRHub/",
{
accessTokenFactory: () => "referencetokenValue"
}).build();
JS客户端在连接到集线器时正在传递引用令牌。我们需要在WebAPI项目中对SignalR使用参考令牌身份验证。
在Microsoft网站上,仅提供了SignalR的JWT令牌认证文档。在任何地方都找不到有关参考令牌的文档。
需要帮助在startup.cs文件中添加参考令牌认证的配置。
找到解决方案here。
可以将查询字符串中出现的任何令牌添加到请求标头中,如下所示:-
app.Use(async (context, next) =>
{
if (context.Request.Path.Value.StartsWith("/SignalRHub/"))
{
var bearerToken = context.Request.Query["access_token"].ToString();
if (!String.IsNullOrEmpty(bearerToken))
context.Request.Headers.Add("Authorization", new string[] { "bearer " + bearerToken });
}
await next();
});
上面的代码必须在启动类的Configure函数中添加。