带有参考令牌的ASPNETCore SignalR身份验证

问题描述 投票:2回答:1

我们在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文件中添加参考令牌认证的配置。

c# authentication signalr bearer-token asp.net-core-signalr
1个回答
0
投票

找到解决方案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函数中添加。

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