从typescript中的Set-Cookie头中获取jwt值



我正在使用javascript k6负载测试工具向我们的应用程序服务器发出http.post请求。

服务器向我发回一个响应,还发送响应头。

其中一个响应标头是发送回我的以下Set Cookie标头:设置Cookie:xx00000000xxxxxxxxxx0000000000xx jwt=<jwt_token>;路径=/;过期=2021年4月23日星期五格林尼治标准时间04:15:19;domain=.somedomain.com;samesite=无;安全

为了通过我的k6测试工具向我的服务器发出后续请求,我想解析上面的Set Cookie值,并只获取<jwt_token>并存储在类似于=>fetched_jwt=<jwt_token>

如何从服务器发回的具有多个值的Set-Cookie标头中获取jwt的值?

根据MDN,设置Cookie语法如下

Set-Cookie: <cookie-name>=<cookie-value>
// and also can be followed by other attribute
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
// but no matter what attributes behind it, cookie name and value will be on first

因此,如果您想要解析它,只需获取第一个属性即可。你可以用String.prototype.split()来做,然后得到第一个。

const myCookie = unparsedCookie.split(';')[0];

并再次使用String.prototype.split()来获取其名称和值。

const [name, value] = myCookie.split('=');

const unparsedCookie = 'xx00000000xxxxxxxxxx0000000000xx-jwt=<jwt_token>; path=/; expires=Fri, 23 Apr 2021 04:15:19 GMT; domain=.somedomain.com; samesite=none; secure';
const myCookie = unparsedCookie.split(';')[0];
const [name, value] = myCookie.split('=');
console.log(name);
console.log(value);

但请记住,Setcookie可能被编码为URI组件。

<cookie-value>可以选择用双引号包装,并包括任何US-ASCII字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠。编码:许多实现对cookie值执行URL编码,但根据RFC规范,这不是必需的。不过,它确实有助于满足允许使用哪些字符的要求。

MDN

因此,您可能需要使用decodeURIComponent()对其进行解码。

但是,由于您的案例是JWT代币,您不必担心这一点。JWT应该生成为base64url,对url友好。

最新更新