
Eu queria executar uma API usando a linha de comando, mas preciso passar Cookie: JSESSIONID=<>; auth_cookie=<> valor ao executá-lo. Temos autenticação CAS para a API de destino.
Por favor, deixe-me saber o curl ou outro comando para obter o Cookie: JSESSIONID=<>; auth_cookie=<> valor para que eu possa passá-lo durante a execução da API.
Eu tentei com
curl -v -s --cacert /etc/ssl/certs/cacert.crt https://example.com/login -c cookiefile -d "[email protected]&password=xxxx" -X POST
Mas está apenas armazenando JSESSIONID no arquivo cookie. No login do navegador, https://example.com/login
ele será redirecionado para a página de login do servidor CAS, após a autenticação, ele será redirecionado parahttps://example.com/index
Segui a abordagem dada por @HBruijn.
ENCODED_DEST=`echo "https://example.com/login/login" | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg' | sed 's/%2E/./g' | sed 's/%0A//g'`
CAS_ID=`curl -L -s --cacert /etc/ssl/certs/cacertga.crt -c $COOKIE_JAR https://cas-server.example2.com/cas/login?service=$ENCODED_DEST | grep name=.lt | sed 's/.*value..//' | sed 's/\".*//'`
Este CAS_ID e JSESSIONID precisam ser usados na próxima chamada
curl -L -s --cacert /etc/ssl/certs/cacertga.crt --data "username=$USERNAME&password=$PASSWORD<=$CAS_ID&execution=e1s1&_eventId=submit" -i -b $COOKIE_JAR -c $COOKIE_JAR https://cas-server.example2.com/cas/login?service=$ENCODED_DEST -D .header.txt -o /dev/null
e, finalmente, .header.txt deve ter o URL do local anexado ao ID do ticket. É necessário fazer a chamada final nesse local para obter auth_cookie. Mas, no meu caso, não está fornecendo o URL de localização em si.
indico soluçãoaqui
Estou editando esta pergunta, pois consegui uma solução usando python. Use mechanize.Browser() e será fácil obter o cookie de autenticação necessário.
Responder1
O fato de você precisar fazer login primeiro antes de poder acessar a API significa que uma única solicitação curl provavelmente não é suficiente.
Você provavelmente precisará de um script com múltiplas curl
solicitações e fluxo de trabalho semelhante a:
- Faça solicitação de API com os cookies existentes do cookiefile
- Verifique o código de resposta, se estiver OK, os cookies da sessão ainda não expiraram e você não precisa fazer mais nada. Sim!
- Se o código de resposta indicar um status de erro de autenticação (sua sessão de autenticação está vazia ou expirou); então você precisa fazer login.
- Publique suas credenciais no formulário de login do servidor CAS.
- Verifique o código de resposta e veja se o login foi bem-sucedido e atualize o arquivo cookie.
Oudie();
- VÁ PARA 1.
O plug-in padrão das ferramentas de desenvolvedor do Chrome pode ajudá-lo a criar a base para esse script curl com oCopiar tudo como cURLopção no console de rede.