获取 Cookie 的问题:JSESSIONID 和 auth_cookie

获取 Cookie 的问题:JSESSIONID 和 auth_cookie

我想使用命令行执行一个 API,但在执行时需要传递 Cookie:JSESSIONID=<>; auth_cookie=<> 值。我们对目标 API 进行了 CAS 身份验证。

请让我知道 curl 或其他命令来获取 Cookie: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 存储在 cookie 文件中。在浏览器中登录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 应该包含位置 URL 和票证 ID。需要对该位置进行最终调用以获取 auth_cookie。但就我而言,它并没有提供位置 URL 本身。

我参考解决方案这里

我正在编辑这个问题,因为我用python找到了一个解决方案。使用mechanize.Browser(),很容易就能获得需要的身份验证cookie。

答案1

事实上,您需要先登录才能访问 API,这意味着单个 curl 请求可能不够用。

您可能需要一个具有多个请求和工作流程的脚本,curl类似于:

  1. 使用 cookiefile 中的现有 cookie 发出 API 请求
  2. 检查响应代码,如果正确,则会话 cookie 尚未过期,您无需执行更多操作。是的!
  3. 如果响应代码指示身份验证错误状态(您的身份验证会话为空或已过期);那么您需要登录。
  4. 将您的凭证发布到 CAS 服务器登录表单。
  5. 检查响应代码,查看登录是否成功并更新 cookie 文件。
    或者die();
  6. 转到 1。

标准 Chrome 开发人员工具插件可以标准地帮助您使用以下代码创建此类 curl 脚本的基础全部复制为 cURL网络控制台中的选项。

在此处输入图片描述

相关内容