SignalR accessTokenFactory не передает токен в строку запроса - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь получить доступ к токену в классе 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 имеет значение null, даже если я передаю его черезaccessTokenFactory.Нет параметра строки запроса "access_token".Код был составлен по руководству по документам .Я уже пытался изменить свой вызов промежуточного программного обеспечения при запуске и не разрешил.

Файл запуска:

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
   });

}

Любая помощь будет оценена

1 Ответ

0 голосов
/ 09 мая 2019

Похоже, вы на самом деле не предоставляете токен в своей реализации accessTokenFactory.Вам необходимо вернуть значение токена, иначе HubConnection не получит его

accessTokenFactory: () => {
   return token                                         
}
...