Кому-нибудь повезло с сохранением токена JWT в файле cookie, и работает ли он вместе с ValidateAntiforgeryToken ядра Asp.Net?У меня есть приложение Angular и отдельное приложение Asp.Net Core 2.2 Api.У меня есть токен JWT, встроенный в файл cookie.
Просто заметьте, я не использую ни аутентификацию cookie, ни какие-либо компоненты MVC, я помещаю токен JWT в файл cookie.Хотя документация Microsoft, наряду с сообщениями в блогах от AuthO и Okta, ссылаются на хранение JWT в localStorage, я очень много слышал о том, что это плохая идея и что хранение JWT в cookie-файле немного более безопасно.Но теперь мы должны включить Antiforgery для борьбы с CSRF-атаками.
У меня это почти работает.У меня есть промежуточное программное обеспечение, которое принимает запрос и читает JWT из cookie, а затем я создаю заголовок токена Bearer из содержимого cookie.Работает нормально.
Если срок действия JWT истекает, я больше не получаю ошибку 401 от моих конечных точек, которые проверяют токен Antiforgery.Я получаю обратно 400 ошибок.Это означает, что токен Antiforgery либо отсутствует, либо недействителен.Fiddler показывает, что файл cookie Antiforgery присутствовал в запросе, и содержимое файла cookie Antiforgery было именно тем, что я ожидал.
Почему файл cookie Antiforgery не проверялся, потому что JWT не проверял авторизацию?Если я получил 401, я могу затем отправить запрос на проверку токена обновления, но в этот момент токен Antiforgery недействителен, и защищенные конечные точки не будут отвечать.Даже если срок действия моего JWT истек, я смог бы отправить на конечную точку токена Refresh, но все равно защитить ее с помощью проверки Antiforgery.
Есть ли другой подход, который предпочтительнее в этой ситуации?Например, использовать Basic Auth или HMAC (очевидно, всегда работающий под https)?Должен ли я переопределить часть «Авторизация» и выполнить контроль авторизации самостоятельно, чтобы лучше контролировать то, что отправляется для проверки на защиту от подделки?Является ли localStorage жизнеспособным и не таким «злым», как это делают проверки безопасности и разговоры других разработчиков?Должен ли я переписать Api в Node и самостоятельно контролировать Авторизацию и Антиподделение?Или для SPA лучше всего хранить токен только в памяти (или хранилище Ngrx)?Я ценю любое понимание.