javascript - 如何在javascript fetch中存储访问令牌并传递给下一个api调用
问题描述
我只是想知道是否有人可以帮助我解决这个问题。我获取访问令牌的代码是:
const inputBody = 'client_id=00000000-0000-0000-0000-000000000001&secret=mySecretPassword';
const headers = {
'Content-Type':'application/x-www-form-urlencoded',
};
fetch('https://api.replicastudios.com/auth',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
然后,我需要包含从第一次调用中收到的访问令牌,以便将其插入下方。
const headers = {
'Authorization':'Bearer {token}'
};
fetch('https://api.replicastudios.com/voice',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
保存访问令牌并将其插入第二个请求的最佳方法是什么?
解决方案
请,再一次,请不要将用户安全令牌存储在会话存储、本地存储、cookies(您自己,让浏览器为您安全地完成)等中。
浏览器有非常棒的方式来处理那些对安全敏感的东西,这些方式可以防止通过 XSS 和其他东西进行会话劫持。
正确的做事方式:在前端调用您的登录(或在您的情况下)身份验证路由,从后端而不是在正文中发送您的安全令牌,您需要将其设置在安全 cookie 中。使用 Node+Express 的常见方法之一是这样的:
res.status(200)
.cookie('auth_cookie', token, { httpOnly: true, maxAge: 86400 * 1000, sameSite: 'none', secure: true})
.json({ success: true, message });
这是其中的一个示例,您应该在这里了解所有这些参数的作用:https ://developer.mozilla.org/en-US/docs/Tools/Storage_Inspector/Cookies
在最后一部分,之后您不需要手动将这些 cookie 包含在彼此的请求中,如果您使用的是 Axios,您可以将{ withCredentials: true }
这些安全令牌自动包含在您请求的 cookie 部分中。这里已经有一个很好的线程:让 Axios 在其请求中自动发送 cookie
我知道这看起来很有效,但它会使网络安全(呃)并促进良好的实践。
推荐阅读
- node.js - 为什么我需要超过 2 秒才能完成交易?
- arrays - 当行号和数组号不匹配时循环返回一个数组。嵌套循环的问题
- java - 如何将 Main 中的参数提供给 Anylogic 中的代理
- html - 如何在重叠容器时“清除”弹性框
- c# - 为什么我的 Ajax 数据没有发送到我的 SQL Server
- python - 在 numba 中缓存 jit 编译的函数
- objective-c - 从 OS X 10.13 之前的 Asset Catalog 获取颜色
- python - 实现具有可变发射和转移矩阵的隐马尔可夫模型
- ios - 使用 EventKit 获取提醒列表
- php - 职位发布表单字段和列表上传附件可查看和下载