쿠키 가져오기 문제: JSESSIONID 및 auth_cookie

쿠키 가져오기 문제: JSESSIONID 및 auth_cookie

명령줄을 사용하여 하나의 API를 실행하고 싶었지만 Cookie: JSESSIONID=<>;를 전달해야 합니다. auth_cookie=<> 실행하는 동안 값. 대상 API에 대한 CAS 인증이 있습니다.

쿠키를 얻으려면 컬이나 다른 명령을 알려주십시오: JSESSIONID=<>; auth_cookie=<> 값이므로 API를 실행하는 동안 전달할 수 있습니다.

나는 시도했다

 curl -v -s --cacert /etc/ssl/certs/cacert.crt https://example.com/login -c cookiefile -d "[email protected]&password=xxxx" -X POST

하지만 쿠키 파일에 JSESSIONID를 저장하는 것뿐입니다. 브라우저 로그인에서는 https://example.com/login인증 후 CAS 서버 로그인 페이지로 리디렉션됩니다.https://example.com/index

나는 @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/\".*//'`

이 CAS_ID 및 JSESSIONID는 다음 호출에서 사용해야 합니다.

curl -L -s --cacert /etc/ssl/certs/cacertga.crt --data "username=$USERNAME&password=$PASSWORD&lt=$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

마지막으로 .header.txt에는 티켓 ID가 추가된 위치 URL이 있어야 합니다. auth_cookie를 얻으려면 해당 위치에서 최종 호출을 수행해야 합니다. 하지만 제 경우에는 위치 URL 자체를 제공하지 않습니다.

나는 해결책을 언급한다여기

Python을 사용하여 솔루션을 얻었으므로 이 질문을 편집하고 있습니다. mechanize.Browser()를 사용하면 인증 쿠키 필요를 쉽게 얻을 수 있습니다.

답변1

API에 액세스하기 전에 먼저 로그인해야 한다는 사실은 단일 컬 요청만으로는 충분하지 않을 수 있음을 의미합니다.

curl다음과 유사한 여러 요청 및 작업 흐름이 포함된 스크립트가 필요할 수 있습니다 .

  1. 쿠키 파일의 기존 쿠키로 API 요청하기
  2. 응답 코드를 확인하세요. 괜찮다면 세션 쿠키가 아직 만료되지 않았으므로 더 이상 수행할 필요가 없습니다. 응!
  3. 응답 코드가 인증 오류 상태(인증 세션이 비어 있거나 만료됨)를 나타내는 경우 그런 다음 로그인해야 합니다.
  4. CAS 서버 로그인 양식에 자격 증명을 게시하세요.
  5. 응답 코드를 확인하여 로그인 성공 여부를 확인하고 쿠키 파일을 업데이트합니다.
    또는die();
  6. 1로 가세요.

표준 Chrome 개발자 도구 플러그인은 다음과 같은 컬 스크립트의 기초를 만드는 데 표준적인 도움을 줄 수 있습니다.모두 cURL로 복사네트워크 콘솔의 옵션입니다.

여기에 이미지 설명을 입력하세요

관련 정보