Установить-Cook ie в заголовке ответа, но не отображается в браузере или doument.cook ie (готовить ie с jwt в спокойной архитектуре) - PullRequest
0 голосов
/ 15 апреля 2020

запросить ответное изображение Я использую токен jwt в asp. net web api 2 и пытаюсь отправить обратно токен jwt, разделенный на полезную нагрузку двух файлов cookie (срок действия), подпись (HttpOnly, сессия) после входа пользователя в систему.

        Web Api Controller:
        var resp = new HttpResponseMessage();
        var value = TokenManager.GenerateTokenForUser(user);
        string[] arr = value.Token.Split('.');
        string headerandpayload = arr[0]+"."+arr[1];
        string sign = arr[2];
        var payload = new CookieHeaderValue("payload", headerandpayload);
        payload.Expires = DateTimeOffset.Now.AddMinutes(10);
        payload.Domain = Request.RequestUri.Host;
        payload.Secure = false;
        payload.Path = "/";
        var signature = new CookieHeaderValue("signature", sign);
        signature.HttpOnly = true;
        signature.Domain = Request.RequestUri.Host;
        payload.Secure = false;
        signature.Path = "/";
        resp.Headers.AddCookies(new CookieHeaderValue[] { payload,signature });
        return resp;

        Web api config:
        var cors = new EnableCorsAttribute("http://localhost:65392", "*","*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

       JS of site hosted in different domain or port:
       $('#login').click(function () {
        $.ajax({
            type: 'get',
            url: loginurl,
            xhrFields: { withCredentials: true },
        }).done(function (output, status, xhr) {
            console.log(document.cookie);
        }).fail(function (error) {
            console.log(error);
        });
    });

полезной нагрузки cook ie предназначен для доступа клиента (SPA), в данном случае asp. net MVC (jquery в поле зрения).

Но проблема, с которой я сталкиваюсь, заключается в том, что при размещении проекта webapi на iis-сервере после входа в систему в настройках ответа указывается значение ie. Set-Cook ie также отправляет в заголовке команду cook ie. 'Cook ie' в последующих запросах и возвращает аутентифицированный результат, но он действительно показывает cook ie в хранилище браузера и не может быть доступен для JavaScript (не httponly) cook ie

This работает совершенно нормально при запуске обоих проектов вместе в iis express из VS2019, где оба URL-адреса являются localhost: 8782, localhost: 7212 (отличается только по номеру порта №). Здесь я вижу его в хранилище браузера также можно получить доступ повар ie

...