Использовал ранее на клиенте React JS + axios. Когда браузер получал ответ от сервера, то автоматом сохранял куки, и каждый запрос на сервер был уже с этими куками. Сейчас же я пытаюсь сделать авторизацию по JWT и мне нужно отправлять куки, так как там JWT.
На сервере я просто достаю его из куков и добавляю в заголовки, чтобы нормально отрабатывала аутентификация:
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace GoToEs.Identity.Jwt.Middleware
{
public class SecureJwtMiddleware
{
private readonly RequestDelegate _next;
public SecureJwtMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
string token = context.Request.Cookies[".AspNetCore.Application.Id"];
if (!string.IsNullOrEmpty(token))
{
context.Request.Headers.Add("Authorization", "Bearer " + token);
}
// https://securityheaders.com
// Заголовок X-Content-Type-Options используется для защиты от уязвимостей типа MIME sniffing.
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
context.Response.Headers.Add("X-Xss-Protection", "1");
// X-Frame-Options сообщает браузеру, что если ваш сайт помещен внутри HTML-фрейма, то ничего не отображать.
// Это очень важно при попытке защитить себя от попыток clickjacking-взлома.
context.Response.Headers.Add("X-Frame-Options", "DENY");
await _next(context);
}
}
}
Это нужно, чтобы на клиенте не было доступ к JWT через JavaScript, так как это readonly куки. Есть целая статья про безопасность, всё это сделано в целях безопасности, долго расписывать.
На клиенте хочу в
ApiAuthenticationStateProvider : AuthenticationStateProvider реализовать проверку аутентификации.