Не удается создать файл cookie httponly, содержащий jwt, в ASP.NET Core и React - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь реализовать схему аутентификации в моем приложении.Контроллер, а точнее метод, отвечающий за проверку учетных данных пользователя и генерацию jwt, который он затем должен поместить в cookie-файл httponly, выглядит следующим образом

    [HttpPost]
    [Route("authenticate")]
    public async Task<IActionResult> Authenticate([FromBody] User user)
    {
        var response = await _repository.User.Authenticate(user.Login, user.Password);
        if (!response) return Forbid();

        var claims = new List<Claim>
        {
            new Claim("value1", user.Login)
        };
        string token = _jwtService.GenerateJwt(claims);

        HttpContext.Response.Cookies.Append(
            "SESSION_TOKEN",
            "Bearer " + token,
            new CookieOptions
            {
                Expires = DateTime.Now.AddDays(7),
                HttpOnly = true,
                Secure = false
            });

        return Ok();
    }

Я тестировал этот метод в Postman - все работает аккуратно и правильнотам.Файл cookie также создается.Более того, недавно я создал приложение с использованием Angular, в котором использовался один и тот же метод аутентификации, но с помощью http-модуля Angular cookie создавался все время.Вот как этот метод выглядит в моем приложении React с использованием Axios

export const authenticate = async (login, password) => {
 return await axiosLocal.post('/api/auth/authenticate',
    {login, password}).then(response => {
    return response.status === 200;
 }, () => {
    return false;
});

Все, что я получаю в ответ при попытке войти в систему, - это код ответа 200. Я почти уверен, что это что-то про Axiosнастройки.Также, если кому-то интересно, переменная «axiosLocal» содержит baseURL для API.

- обновление 1 Ok.Если я не ошибаюсь, чтобы установить cookie из ответа, я должен отправить все запросы с опцией {withCredentials: true}.Но когда я пытаюсь сделать это, запрос блокируется CORS, хотя я уже установил политику cors, которая должна разрешать обработку запросов из любого источника, подобного этому

app.UseCors(builder => builder.AllowAnyHeader()
            .AllowAnyMethod()
            .AllowAnyOrigin()
            .AllowCredentials());

1 Ответ

0 голосов
/ 26 сентября 2019

Наконец-то решено.Помогла мне передать .SetIsOriginAllowed(host => true) вместо .AllowAnyOrigin() в настройки CORS с { withCredentials: true } в качестве опции в запросе Axios.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...