从打字稿中的 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=
为了通过我的 k6 测试工具向我的服务器发出后续请求 - 我想解析上面的 Set-Cookie 值并仅获取
如何从 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 组件。
<cookie-value>
可以选择用双引号括起来,并包括除控制字符、空格、双引号、逗号、分号和反斜杠之外的任何 US-ASCII 字符。编码:许多实现对 cookie 值执行 URL 编码,但是根据 RFC 规范,它不是必需的。不过,它确实有助于满足有关允许使用哪些字符的要求。
MDN
因此,您可能需要使用decodeURIComponent()
对其进行解码。
但是,由于您的案例是 JWT 令牌,您不必担心这一点。 JWT 应该生成对 url 友好的 base64url。
【讨论】:
以上是关于从打字稿中的 Set-Cookie 标头中获取 jwt 值的主要内容,如果未能解决你的问题,请参考以下文章
从 Angular 2 打字稿中的 HTML 获取复选框值。