Привет,
Я получаю эту ошибку при попытке вызвать store.Get () по запросу от websocket.Conn.Request ()
session, err := store.Get(conn.Request(), "my_session")
Ошибка возникает из-за функции verifyMac в gorilla / securecookie.
Как вы ее решили? :)
Я тоже это вижу и хотел бы знать, как это очистить / решить.
Согласовано ли поведение при ошибке? Или это касается только некоторых запросов?
Вт, 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.
Самый полезный комментарий
Вы не должны встраивать ключи / учетные данные в исходный код. Вместо этого вы должны передать их через среду - например,
os.Getenv("APPNAME_SESSION_KEY")
. Эта среда может быть загружена вашей системой развертывания - в случае k8s, с использованием функции Secrets: https://kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables