Sessions: securecookie: значение недействительно

Созданный на 13 окт. 2013  ·  9Комментарии  ·  Источник: gorilla/sessions

Привет,
Я получаю эту ошибку при попытке вызвать store.Get () по запросу от websocket.Conn.Request ()

session, err := store.Get(conn.Request(), "my_session")

Ошибка возникает из-за функции verifyMac в gorilla / securecookie.

Самый полезный комментарий

Вы не должны встраивать ключи / учетные данные в исходный код. Вместо этого вы должны передать их через среду - например, os.Getenv("APPNAME_SESSION_KEY") . Эта среда может быть загружена вашей системой развертывания - в случае k8s, с использованием функции Secrets: https://kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

Все 9 Комментарий

Как вы ее решили? :)

Я тоже это вижу и хотел бы знать, как это очистить / решить.

Согласовано ли поведение при ошибке? Или это касается только некоторых запросов?

Вт, 18 июня 2015 г., 14:04 Доминик Хамон [email protected]
написал:

Я тоже это вижу и хотел бы знать, как это очистить / решить.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/gorilla/sessions/issues/16#issuecomment -113047123.

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

Я не знаю, какой правильный способ смягчить это в долгосрочной перспективе, поэтому любые советы приветствуются.

Если вы хотите избежать этого, вам нужен способ переноса ключей для вашего приложения.

Я тоже столкнулся с этой проблемой. В итоге я просто проигнорировал ошибку, поскольку в документации gorilla / sessions говорится, что новый сеанс все еще возвращается. Вы по-прежнему можете вызвать session.Save() , и после этого запрашивающий браузер получит новый действительный файл cookie сеанса.

Я столкнулся с той же проблемой, и сначала ее было немного трудно заметить, проблема в том, что у меня
var store = sessions.NewCookieStore(securecookie.GenerateRandomKey(10))
поэтому каждый раз, когда я перезапускаю сервер, создается новый ключ для магазина, и если вы ранее сохранили файл cookie в веб-браузере, это вызовет ошибку при попытке декодирования файла cookie, поскольку он использует новый ключ и не ключ, когда cookie был создан вначале.
Это может быть проблема, которую трудно обнаружить даже при развертывании в кубернетах, потому что иногда узел (машину) необходимо перезапустить, и этот узел сгенерирует свой собственный ключ, что может вызвать конфликт с другими узлами. Я бы рекомендовал не генерировать случайный ключ, вместо этого вставьте ключ вручную, чтобы не столкнуться с такой проблемой, например:
var store = sessions.NewCookieStore([]byte("asdaskdhasdhgsajdgasdsadksakdhasidoajsdousahdopj"))

Вы не должны встраивать ключи / учетные данные в исходный код. Вместо этого вы должны передать их через среду - например, os.Getenv("APPNAME_SESSION_KEY") . Эта среда может быть загружена вашей системой развертывания - в случае k8s, с использованием функции Secrets: https://kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

На меня также влияет длинный жетон keycloak.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги