Usamos DiscourseSSO e esporadicamente os usuários encontram problemas de login (semelhante a Sporadic issue wp-discourse/SSO: Nonce has already expired). Eu estava tentando depurar isso adicionando alguns logs extras e, felizmente, encontrei o problema depois de alguns dias. Para ser claro, o login funciona na maioria das vezes, apenas esporadicamente (talvez por 5 minutos por dia) os usuários encontram problemas de login.
Usamos configuração de subpasta em um cluster multi-nó, usando banco de dados compartilhado externo e Redis, se isso fizer alguma diferença. Existem dois cenários de falha:
-
Nonce expirado
Quando o usuário é redirecionado para /session/sso_login, o SessionController não obtém o session_id na sessão e, portanto, não consegue localizar o nonce. Tentei registrar a sessão (Rails.logger.warn(\"Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}\")) e ela imprimiu uma sessão vazia. Verifiquei que o navegador está enviando o cookie “*_forum_session*” como recebido na solicitação anterior e o cookie é registrado no servidor se o registro em SessionController (Rails.logger.warn(\"Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}\")). -
O login é concluído, mas o usuário recebe um erro de Login na tela
Quando o usuário é redirecionado para /session/sso_login, o SessionController consegue verificar os dados do SSO e registrar o usuário (vejoVerbose SSO log: User was logged on user5nos logs). Mas quando ele redireciona o usuário para /forums/latest, o usuário vê um erro na tela. Notei que no fluxo de trabalho funcionando, esta ação limpa/retorna vazio o cookie “*cn*”, mas no cenário de falha, ele apenas atualiza e retorna o cookie “*_t*”. Minha suposição é que este cenário também pode estar relacionado à falta de dados de sessão.
Se esperarmos cerca de 5 minutos e tentarmos novamente, tudo volta a funcionar bem.
Não testei se todos os usuários que acessam o site naquele momento encontram o problema ou não, mas me disseram anonimamente que vários usuários o encontraram uma vez em nossa instância.