【发布时间】: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 的经典第一个问题
标签: c# asp.net-core jwt signalr