【问题标题】:ASPNETCore SignalR authentication with Reference token使用参考令牌的 ASPNETCore SignalR 身份验证
【发布时间】:2020-03-31 07:15:57
【问题描述】:

我们在 Web API (netcoreapp2.2) 中使用 ASPNETCore.SignalR 1.1.0。

身份验证:我们正在为我们的项目使用 IdentityServer4 身份验证。

启动.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客户端连接hub的代码。

var connection = new signalR.HubConnectionBuilder()
                    .withUrl("http://localhost:52177/SignalRHub/", 
                    {
                     accessTokenFactory: () => "referencetokenValue"
                    }).build();

JS 客户端在连接到 Hub 时正在传递引用令牌。 我们需要在 WebAPI 项目中对 SignalR 使用 Reference token 认证。

在 Microsoft 的站点中,仅提供了 SignalR 的 JWT 令牌身份验证文档。在任何地方都没有找到任何关于参考令牌的文档。

需要帮助在 startup.cs 文件中添加参考令牌身份验证配置。

【问题讨论】:

  • 您可以参考this document 并尝试使其支持引用令牌。
  • @FeiHan 谢谢你的回复。这个文件我看过。问题是信号器 JS 客户端在查询字符串中传递引用令牌。预期的行为是令牌应该出现在 Header 中。 Microsoft 已使用 JWT 令牌 link 提供了针对此问题的解决方案。但没有提供任何参考令牌的解决方案。

标签: c# authentication signalr bearer-token asp.net-core-signalr


【解决方案1】:

找到解决方案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();
        });

以上代码必须在启动类的配置函数中添加。

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 2016-09-20
    • 2020-08-27
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2019-06-28
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多