如何获取 httpOnly(安全)cookie TestCafe?

Posted

技术标签:

【中文标题】如何获取 httpOnly(安全)cookie TestCafe?【英文标题】:How to get httpOnly (secure) cookies TestCafe? 【发布时间】:2020-05-14 09:20:45 【问题描述】:

出于测试目的,我必须在成功通过身份验证后立即检索 HttpOnly 和 Secure cookie。正如预期的那样,ClientFunction(() => document.cookie) 不起作用。由于 TestCafe 是一个代理,因此应该有一种方法可以访问这种 cookie。我怎样才能到达那里?

【问题讨论】:

【参考方案1】:

目前,TestCafe 不具备获取安全 cookie 的能力。我们对此有一个功能建议。请关注https://github.com/DevExpress/testcafe/issues/4428 问题。

【讨论】:

您实际上可以通过拦截 http 请求来解决这个问题。我通过记录请求并在选项中指定标头和正文来访问安全和 httpOnly cookie(因为我需要正文中的 JSON 有效负载以及 cookie)。【参考方案2】:

我的解决方法是使用 RequestLogger。例如:

import  Selector, RequestLogger  from 'testcafe';

// Want everything from example.com
const logger = RequestLogger(/example.com/, 
   logResponseHeaders: true,
   logResponseBody: true
   // Do not set stringify response body if your response
   // comes as gzip or brotli or whatever, instead you
   // will need to use Node's zlib to unzip it and read it
);

fixture `My test`
   .page `https://example.com`
   .requestHooks(logger);

test(`Log in and retrieve cookies`, async t => 
   
   await t
   // Do things here
   .click(...)

   const requests = logger.requests
   for (const req of requests) 
       console.log('Headers: ', req.response.headers)

       for (const cookie of req.response.headers['set-cookie']) 
          // You will have to parse the cookie yourself
          console.log(cookie)
       
   
);

【讨论】:

谢谢@James-Young。我的做法与解决方法完全相同。但这仍然很痛苦,因为我需要为每个夹具使用 RequestLogger 这当然很痛苦,不是吗?我想我需要分叉 testcafe,所以我以后不必使用这个解决方法,因为 TestCafe 需要很长时间才能修复它(问题已经开放了两年!)

以上是关于如何获取 httpOnly(安全)cookie TestCafe?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 读取 HttpOnly cookie

如何在前端使用 HttpOnly jwt cookie

了解安全/httponly cookie 如何用于 Java 应用程序

安全修复之Web——会话Cookie中缺少HttpOnly属性

如何在 Flask 中设置 HTTPONLY cookie

没有设置安全标志和 HttpOnly 标志的 Cookie