从打字稿中的 Set-Cookie 标头中获取 jwt 值

Posted

技术标签:

【中文标题】从打字稿中的 Set-Cookie 标头中获取 jwt 值【英文标题】:fetch the jwt value from Set-Cookie header in typescript 【发布时间】:2021-04-23 03:24:56 【问题描述】:

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

服务器给我发回一个响应,它也发送响应头。

其中一个响应标头是以下发回给我的 Set-Cookie 标头: 设置 Cookie:xx00000000xxxxxxxxxx0000000000xx-jwt=;路径=/;过期=格林威治标准时间 2021 年 4 月 23 日星期五 04:15:19;域=.somedomain.com;同一站点=无;安全

为了通过我的 k6 测试工具向我的服务器发出后续请求 - 我想解析上面的 Set-Cookie 值并仅获取 的 jwt 值并存储在像 => fetched_jwt= 这样的变量中

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

【问题讨论】:

那么,您想解析 cookie 以便获取 jwt 令牌,对吗?如果是这样,您可以使用cookie library 进行操作。它会将 cookie 解析为 js 对象,因此您可以选择 jwt 我只是在我的问题中澄清了一些其他细节。我查看了上面的 cookie 库,但它似乎是在服务器端使用的。我想在客户端解析 Set-Cookie。 为什么要在客户端解析 Set-cookie?这是服务器端的事情。您可能想改为解析 cookie 标头 【参考方案1】:

根据 MDN,Set-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);

但请记住,Set-cookie 可能被编码为 URI 组件。

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

MDN

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

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

【讨论】:

以上是关于从打字稿中的 Set-Cookie 标头中获取 jwt 值的主要内容,如果未能解决你的问题,请参考以下文章

如何从打字稿中的数组中获取键[重复]

无法从打字稿中的 json 对象获取数组响应

从打字稿中的对象获取特定类型的所有键[重复]

从 Angular 2 打字稿中的 HTML 获取复选框值。

MEAN STACK angular 2:从打字稿中的多个api获取数据

Angular 无法从 HttpEvent 标头获取 ETag 标头