SignalR accessTokenFactory 不将令牌传递给请求查询字符串
Posted
技术标签:
【中文标题】SignalR accessTokenFactory 不将令牌传递给请求查询字符串【英文标题】:SignalR accessTokenFactory doesn't pass token to request query string 【发布时间】:2019-09-24 11:18:45 【问题描述】:我正在尝试通过查询字符串访问 SignalRHub 类上的令牌。 这是客户端代码:
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: () => return token
或只是accessTokenFactory: () => token
。
确实是 return
关键字丢失了...我现在感觉非常愚蠢...谢谢!
把它留在这里,让我未来的自己好好笑……关于 SO 的经典第一个问题
【参考方案1】:
看起来您实际上并未在 accessTokenFactory 实现中提供令牌。您需要返回令牌值,否则您的 HubConnection 将无法获取它
accessTokenFactory: () =>
return token
【讨论】:
以上是关于SignalR accessTokenFactory 不将令牌传递给请求查询字符串的主要内容,如果未能解决你的问题,请参考以下文章