Ядро Asp.net позволяет настраивать заголовки с помощью CORS (с осями на стороне клиента) - PullRequest
0 голосов
/ 19 июня 2019

У меня есть одно приложение (в Vuejs) + axios на стороне клиента и на стороне сервера Asp.net Core Web Api. Я добавил аутентификацию токена jwt. Я настроил свой сервер, чтобы добавить пользовательский заголовок, когда токен истек. (В ответе был заголовок «Token-Expired»).

Заголовок «token-expired» не присутствовал в объекте error.response.headers от перехватчика axios ... (Примечание: это расстраивает, потому что заголовок присутствует в Postman, но не в axios).

Редактировать: этот вопрос на github кажется похожим на мой случай https://github.com/axios/axios/issues/606

1 Ответ

1 голос
/ 19 июня 2019

По умолчанию браузер не предоставляет приложению все заголовки ответа.Для получения дополнительной информации см. Обмен ресурсами между источниками W3C (терминология): простой заголовок ответа .

Заголовки ответа, доступные по умолчанию:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Срок действия последнего изменения
  • Pragma

Источник: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#set-the-exposed-response-headers

Более общая информация: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

Чтобы сделать другие заголовки доступными для приложения, вызовите метод WithExposedHeaders в разделе Настройка из автозагрузки.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   // ...

   app.UseCors(builder =>
   {
      builder.WithOrigins("http://localhost:8080");
      builder.AllowAnyHeader();
      builder.WithExposedHeaders("Token-Expired");
      builder.AllowAnyMethod();
      builder.AllowCredentials();
      builder.Build();
   });
}

Примечание : необходимо указать конкретное происхождение (и не добавлять метод AllowAnyOrigin ()).Действительно, в спецификации CORS также указывается, что установка начала координат на «*» (все источники) недопустима, если присутствует заголовок Access-Control-Allow-Credentials.

Et voilà:)

...