Sessions: securecookie: o valor não é válido

Criado em 13 out. 2013  ·  9Comentários  ·  Fonte: gorilla/sessions

Oi,
Recebo este erro ao tentar chamar store.Get () em uma solicitação de websocket.Conn.Request ()

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

O erro se origina da função verifyMac de gorilla / securecookie.

Comentários muito úteis

Você não deve inserir chaves / credenciais em seu código-fonte. Em vez disso, você deve passá-los por meio do ambiente - por exemplo, os.Getenv("APPNAME_SESSION_KEY") . Esse ambiente pode ser inicializado por seu sistema de implantação - no caso do k8s, usando a funcionalidade Secrets: https://kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

Todos 9 comentários

Como você resolveu isso? :)

Também estou vendo isso e adoraria saber como esclarecê-lo / resolvê-lo.

O comportamento do erro é consistente? Ou afeta apenas alguns pedidos?

Em Qui, 18 de junho de 2015 às 14h04 Dominic Hamon [email protected]
escreveu:

Também estou vendo isso e adoraria saber como esclarecê-lo / resolvê-lo.

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/gorilla/sessions/issues/16#issuecomment -113047123.

Consegui atenuar isso retornando uma página válida quando acertei o erro (em vez de 500) e, em seguida, excluindo o cookie manualmente do navegador. Acho que é causado por eu estar atualizando as chaves de autenticação / criptografia, mas tendo um cookie no navegador de uma sessão existente.

Não sei qual é a maneira certa de mitigar isso a longo prazo, então qualquer conselho é bem-vindo.

Se quiser evitar isso, você precisa encontrar uma maneira de seu aplicativo migrar as chaves.

Eu também encontrei esse problema. Acabei ignorando o erro, já que os docs do session.Save() e, em seguida, o navegador solicitante terá um novo cookie de sessão válido.

Eu estava enfrentando o mesmo problema e foi um pouco difícil de detectar no início, o problema é que eu tinha
var store = sessions.NewCookieStore(securecookie.GenerateRandomKey(10))
então, cada vez que eu reinicio o servidor, uma nova chave para o armazenamento é gerada, e se você salvou o cookie anteriormente no navegador da web, isso causaria um erro ao tentar decodificar o cookie porque ele está usando a nova chave e não a chave quando o cookie foi criado pela primeira vez.
Este pode ser um problema difícil de detectar ainda pior ao implantar no kubernetes, porque às vezes um nó (máquina) precisa ser reiniciado e esse nó irá gerar sua própria chave e isso pode causar um conflito com os outros nós. Eu recomendaria não gerar uma chave aleatória, em vez disso, inserir uma chave manualmente para que você não enfrente esse problema, como:
var store = sessions.NewCookieStore([]byte("asdaskdhasdhgsajdgasdsadksakdhasidoajsdousahdopj"))

Você não deve inserir chaves / credenciais em seu código-fonte. Em vez disso, você deve passá-los por meio do ambiente - por exemplo, os.Getenv("APPNAME_SESSION_KEY") . Esse ambiente pode ser inicializado por seu sistema de implantação - no caso do k8s, usando a funcionalidade Secrets: https://kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

Eu também fui afetado devido a um longo token de keycloak.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

CasperHK picture CasperHK  ·  11Comentários

gtaylor picture gtaylor  ·  7Comentários

marksalpeter picture marksalpeter  ·  17Comentários

luca-moser picture luca-moser  ·  3Comentários

cless picture cless  ·  23Comentários