
Ich wollte eine API über die Befehlszeile ausführen, muss aber bei der Ausführung den Wert Cookie: JSESSIONID=<>; auth_cookie=<> übergeben. Wir haben eine CAS-Authentifizierung für die Ziel-API.
Bitte teilen Sie mir den Curl- oder einen anderen Befehl zum Abrufen des Cookie-Werts mit: JSESSIONID=<>; auth_cookie=<>, damit ich ihn beim Ausführen der API übergeben kann.
Ich habe versucht mit
curl -v -s --cacert /etc/ssl/certs/cacert.crt https://example.com/login -c cookiefile -d "[email protected]&password=xxxx" -X POST
Aber es speichert nur JSESSIONID in der Cookie-Datei. Bei der Browseranmeldung https://example.com/login
wird zur CAS-Server-Anmeldeseite weitergeleitet. Nach der Authentifizierung wird sie weitergeleitet zuhttps://example.com/index
Ich bin dem Ansatz von @HBruijn gefolgt.
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/\".*//'`
Diese CAS_ID und JSESSIONID müssen beim nächsten Anruf verwendet werden
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
und schließlich sollte .header.txt eine Standort-URL mit angehängter Ticket-ID enthalten. Es muss ein letzter Aufruf dieses Standorts erfolgen, um Auth_Cookie zu erhalten. In meinem Fall wird jedoch nicht die Standort-URL selbst angegeben.
Ich empfehle die LösungHier
Ich bearbeite diese Frage, da ich eine Lösung mit Python habe. Verwenden Sie mechanize.Browser() und Sie erhalten ganz einfach ein erforderliches Authentifizierungscookie.
Antwort1
Da Sie sich zunächst anmelden müssen, bevor Sie auf die API zugreifen können, ist eine einzelne Curl-Anfrage wahrscheinlich nicht ausreichend.
Sie benötigen wahrscheinlich ein Skript mit mehreren curl
Anfragen und einem Arbeitsablauf ähnlich dem:
- API-Anfrage mit den vorhandenen Cookies aus der Cookiedatei stellen
- Überprüfen Sie den Antwortcode. Wenn OK, sind die Sitzungscookies noch nicht abgelaufen und Sie müssen nichts weiter tun. Ja!
- Wenn der Antwortcode einen Authentifizierungsfehlerstatus anzeigt (Ihre Authentifizierungssitzung ist leer oder abgelaufen), müssen Sie sich anmelden.
- Senden Sie Ihre Anmeldeinformationen an das Anmeldeformular des CAS-Servers.
- Überprüfen Sie den Antwortcode, um festzustellen, ob die Anmeldung erfolgreich war, und aktualisieren Sie die Cookie-Datei.
Oderdie();
- GEHE ZU 1.
Das Standard-Plugin für die Chrome-Entwicklertools kann Ihnen standardmäßig dabei helfen, die Grundlage für ein solches Curl-Skript zu erstellen, mit demAlles als cURL kopierenOption in der Netzwerkkonsole.