使用参考令牌的 ASPNETCore SignalR 身份验证
Posted
技术标签:
【中文标题】使用参考令牌的 ASPNETCore SignalR 身份验证【英文标题】:ASPNETCore SignalR authentication with Reference token 【发布时间】: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 提供了针对此问题的解决方案。但没有提供任何参考令牌的解决方案。 【参考方案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();
);
以上代码必须在启动类的配置函数中添加。
【讨论】:
以上是关于使用参考令牌的 ASPNETCore SignalR 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# AspNetCore 网站中使用 JWT JSON Web 令牌?
“AADSTS5002730:无效的 JWT 令牌。 Azure Signal R 服务令牌的代表方案中出现“签名算法的密钥不受支持”错误
AspNetCore 2.1 Bearer Token Authentication - 当前用户为空