c# - SignalR accessTokenFactory 不将 token 传递给请求查询字符串

标签 c# asp.net-core jwt signalr

我正在尝试通过查询字符串访问 SignalRHub 类上的 token 。 这是客户端代码:

const connection = new signalR.HubConnectionBuilder()
    .withUrl($("#url").val(), {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets,
    accessTokenFactory: () => {
       token                                         
    }
  })
  .configureLogging(signalR.LogLevel.Trace)
  .build(); 

Jwt 配置:

OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
var path = context.HttpContext.Request.Path.Value;

if (!string.IsNullOrEmpty(accessToken) && (path.Equals("/websocket"))
{
 context.Token = accessToken;
}
 return Task.CompletedTask;
}

问题是当我向中心发出请求时,accessToken 为空,即使我通过 accessTokenFactory 传递它也是如此。没有查询字符串参数“access_token”。代码是在 docs guide 之后制作的.我已经尝试在启动时更改我的中间件调用但没有解决。

启动文件:

public void ConfigureServices(IServiceCollection services)
{            
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
   .AddSessionStateTempDataProvider();

   /*aditional configurations*/

   services.AddSignalR();

   /*more aditional configurations*/

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   app.UseCors(options =>
   {
    options.WithExposedHeaders("Location");
    options.AllowAnyOrigin();
    options.AllowAnyHeader();
    options.AllowAnyMethod();
    options.AllowCredentials();
   });

   app.UseSignalR(routes =>
   {
    routes.MapHub<SignalRHub>("/websocket");
   });

   app.UseAuthentication();

   app.UseMvc(routes =>
   {
    routes.MapRoute("api", "{controller}/{action}/{id}");
   });

   /*aditional middlewares*/

   app.UseForwardedHeaders(new ForwardedHeadersOptions
   {
    ForwardedHeaders = ForwardedHeaders.XForwardedFor |          
    ForwardedHeaders.XForwardedProto
   });

}

我们将不胜感激

最佳答案

看起来您实际上并没有在 accessTokenFactory 实现中提供 token 。您需要返回 token 值,否则您的 HubConnection 将无法获取它

accessTokenFactory: () => {
   return token                                         
}

关于c# - SignalR accessTokenFactory 不将 token 传递给请求查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011670/

相关文章:

c# - Web 作业上的 Windows Azure 管理库认证错误

c# - .NET Core EF 2.1 脚手架-数据库优先-如何添加更多表

Asp.net core 使用Facebook外部登录时redirect_url错误

asp.net-core - ASP.Net Core SignInManager 锁定失败

java - 在 JAVA 中使用 JWT 创建 token

c# - 如何在 DotNetNuke 模块中将项目更新发送到数据库?

C# XML 反序列化和数组

c# - Raycast 但忽略它被调用的游戏对象的对撞机

go - 如何在 Golang 中验证 JWT token

node.js - Passport JWT : Cannot read property '_id' of undefined in MEAN