ASP.NET Core Web API: файл cookie сеанса удаляется после обновления страницыC#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET Core Web API: файл cookie сеанса удаляется после обновления страницы

Сообщение Anonymous »

Я новичок в сеансах/куки-файлах для аутентификации, поэтому постепенно узнаю обо всем.
У меня есть веб-API, который имеет несколько конечных точек для входа, а также защищенный конечная точка, доступ к которой возможен только после того, как файл cookie выдан и срок его действия не истек.
Только для целей тестирования того, как он будет обрабатываться во внешнем интерфейсе, я создал простую форму, которая вызывает эти конечные точки.
Конечная точка входа работает, и я получаю файл cookie, который я настроил в своем бэкэнде, но для другой защищенной конечной точки я получаю ошибку 302 Found (у меня есть кнопка, которая вызывает эту защищенную конечную точку после моего входа в систему), хотя это работает, когда я использую почтальона. т. е. я могу получить доступ к защищенной конечной точке. Это перенаправляет меня на другую конечную точку, которую я не настроил (полагаю, это конечная точка, установленная .NET?)
Конечная точка входа:
Изображение

Авторизованная конечная точка при прямом вызове после входа в систему:
Изображение

Другое дело, что этот файл cookie, который вызывает проблемы с серверной частью, удаляется после перезагрузки/обновления моей страницы, и я не знаю почему.
Я также был бы признателен за любые рекомендации о том, как эффективно справиться с этим. безопасная аутентификация сеанса как на передней, так и на внутренней стороне.
Вот мой код:
Конфигурация аутентификации — я установил для нее небольшой срок действия для тестирования
p>
public static IServiceCollection AddApplicationCookieAuth(this IServiceCollection services)
{
services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options => {
options.Cookie = new() {
Name = "MySessionAuthCookie",
HttpOnly = true
};
options.ExpireTimeSpan = TimeSpan.FromSeconds(30);
options.SlidingExpiration = true;
});

return services;
}

Конечные точки контроллера:
// Protected endpoint
[HttpGet]
[Authorize]
public IActionResult GetProtectedData()
{
return Ok("Protected data");
}

[HttpPost("login")]
public async Task Login(LoginRequest request)
{
var user = await _userManager.FindByNameAsync(request.Email);

if (user != null && await _userManager.CheckPasswordAsync(user, request.Password))
{
var claims = new List
{
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Role, "Admin")
};

var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

var authProperties = new AuthenticationProperties { IsPersistent = true };

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);

return Ok("Login success");
}

return Unauthorized();
}

Мой интерфейс представляет собой обычный HTML и JS для демонстрационных целей.
async function protectedEndpoint() {
try {
const res = await axios.get("https://localhost:7009/api/auth", {withCredentials: true, });
console.log('Response:', res);

} catch(err) {
console.error('Error:', err);
}
}

async function authenticate(data) {
try {
const res = await axios.post("https://localhost:7009/api/auth/login", data, {withCredentials: true});
console.log('Response:', res);
} catch(err) {
console.error('Error:', err);
}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... ge-refresh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»