Как удалить файл cookie HttpOnly на клиенте?

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

Вот как я создаю cookie в первую очередь:

 String refreshToken = issueRefreshToken(username);
 long currentDate = Calendar.getInstance().getTimeInMillis();
 Date expDate = new Date(currentDate + 60 * 24 * 7 * ONE_MINUTE_IN_MILLIS);

 NewCookie newCookie = new NewCookie("RefreshCookie",
                    refreshToken,
                    "/",
                    null,
                    NewCookie.DEFAULT_VERSION,
                    "Comment",
                    60 * 60 * 24 * 7,
                    expDate,
                    false,
                    true);

            // Return the token  on the response
 return Response.ok(accessToken).cookie(newCookie).header("Access-Control-Allow-Credentials", true).build();

Это работает по назначению и создает файл cookie обновления, действительный в течение одной недели.

У меня есть другая конечная точка (/ logout), которая создает еще один файл cookie, который должен перезаписать первый.

 @POST
 public Response logout(){
        NewCookie logoutCookie = new NewCookie(
                "RefreshCookie",
                null,
                "/",
                null,
                NewCookie.DEFAULT_VERSION,
                "",
                0,
                new Date(),
                false,
                true);
        return Response.ok().cookie(logoutCookie).header("Access-Control-Allow-Credentials", true).build();
    }

Этот файл cookie даже не сохраняется во внешнем интерфейсе, если первый клиент не установлен. Я попытался отправить его из подпути, в котором установлен первый файл cookie, но безуспешно. Что-то мне здесь не хватает? Это неправильный способ сделать это?


person BaraKanske    schedule 09.11.2020    source источник


Ответы (1)


Из того, что вы говорите, вы используете httpOnly cookie, поэтому вы должны понимать одну вещь: со стороны клиента вы этого не добьетесь, потому что тогда это приведет к нарушению цели наличия httpOnly cookie, чем это было бы точно так же как обычный файл cookie.

  • Итак, теперь ваше решение по избавлению от файла cookie, когда пользователь выходит из системы, находится на вашем сервере, где, как я полагаю, был создан файл cookie, где вы хотите удалить этот конкретный файл cookie.
person Ntshembo Hlongwane    schedule 09.11.2020
comment
Точно! Однако, насколько я понимаю, единственный способ добиться этого - перезаписать первый файл cookie новым, срок действия которого истекает немедленно. Проблема в том, что у меня это не работает, поскольку файл cookie не сохраняется и не перезаписывается, и я не уверен, почему это так. - person BaraKanske; 09.11.2020
comment
Вы можете прочитать пример, который я когда-то привел для кого-то, кому требуется сеанс на стороне сервера stackoverflow.com/questions/64683813/ все сеансы сохраняются в mongoStore, поэтому вы можете легко справиться с такими вещами, и вот как я проводить экспресс-сессии - person Ntshembo Hlongwane; 09.11.2020