Estou usando um formulário de login HTML para acessar um aplicativo. Isso funciona em um navegador, mas quando tento replicar usando curl, recebo "Falha na autenticação, nome de usuário/senha inválidos". Tenho acesso limitado apenas ao lado do servidor (mas os logs não contêm nenhuma informação adicional além da mensagem citada anteriormente).
Usando um navegador:
Há 2 campos no formulário, nome de usuário e senha, juntamente com um botão de envio. Nas ferramentas de desenvolvedor web, após enviar a solicitação, em Request/payload, vejo apenas os 2 valores.
A string ENCODED relatada nas ferramentas do desenvolvedor tem 58 caracteres.
O campo de cabeçalho da solicitação informa um valor de comprimento de conteúdo de 57 bytes.
Usando Curl:
Ao usar este comando para replicar a solicitação do navegador, incluindo os cabeçalhos de solicitação não dinâmicos, a autenticação falha.
curl -v -d "username=$USER" -d "password=$PASS" \
"https://example.com/app/j_spring_security_check" \
--header @extraheadersfile \
--cookie-jar "cookiefile"
o que é diferente?
A única diferença que vejo entre as solicitações do navegador e do Curl (além dos valores de data e cookie) é que o cabeçalho da solicitação curl relata um comprimento de conteúdo de 55 bytes.
(protocolo http, método, agente do usuário, aceitar-* todas as correspondências)
Os valores de nome de usuário e senha foram inseridos corretamente em ambos os casos.
Suspeito que o problema esteja na carga útil do POST / pode haver alguma diferença na forma como os dados estão sendo codificados, mas não consigo ver de onde vêm os 57 bytes (curl Content-length: 55 / browser Content-length: 57 / carga útil do navegador, codificado por url com 58 caracteres).