我应该如何存储第三部分的访问令牌 api
How should I store access token from a 3rd part api
您好,我正在使用 meteorjs 和第 3 方 api 在第 3 方的数据库上创建用户。
我正在使用 oauth2 获取访问令牌,令牌的有效期为 2 小时。
在使用异步函数获取访问令牌后,我将它与几种不同的方法一起使用。
然而,我不想在每次需要访问令牌时都调用异步函数,而是想将它存储在服务器上直到它过期。
安全存储它们并在服务器上全局使用它们的最佳做法是什么?
非常感谢
RFC6819 - Threat Model and Security Considerations define several threat vectors and counter measurements. In that section 5.3.3. Store Secrets in Secure Storage 定义有关如何存储机密的最佳实践。
Most multi-user operating systems segregate the personal storage of
different system users. Moreover, most modern smartphone operating
systems even support the storage of application-specific data in
separate areas of file systems and protect the data from access by
other applications
鉴于您是 运行 基于 JavaScript 的前端应用程序,最好的方法是将访问令牌存储在 HTML5 web storage.
中
它允许您在 API 调用需要时访问令牌。此外,如果浏览器实现是安全的(例如:- 包含所有安全补丁等),这将提供一个安全存储,拒绝访问其他应用程序。此外,您还可以选择使用 sessionStorage 来提供在选项卡关闭时删除访问令牌的额外安全性。
我最终使用全局变量将令牌存储在服务器上;
token = '';
Meteor.methods({
refreshToken: function () {
token = getToken();
...
});
现在
token
适用于所有方法。我还检查令牌是否仍然有效,如果有效期在 300 以内,我会刷新令牌 seconds.And 该部分的代码如下:
const EXPIRATION_WINDOW_IN_SECONDS = 300;
const expirationTimeInSeconds = token.expires_at.getTime() / 1000;
const expirationWindowStart = expirationTimeInSeconds - EXPIRATION_WINDOW_IN_SECONDS;
const nowInSeconds = (new Date()).getTime() / 1000;
const shouldRefresh = nowInSeconds >= expirationWindowStart;
if (shouldRefresh) {
try {
//refresh the token
} catch (error) {
console.log('Error refreshing access token: ', error.message);
}
}
您好,我正在使用 meteorjs 和第 3 方 api 在第 3 方的数据库上创建用户。
我正在使用 oauth2 获取访问令牌,令牌的有效期为 2 小时。 在使用异步函数获取访问令牌后,我将它与几种不同的方法一起使用。
然而,我不想在每次需要访问令牌时都调用异步函数,而是想将它存储在服务器上直到它过期。
安全存储它们并在服务器上全局使用它们的最佳做法是什么?
非常感谢
RFC6819 - Threat Model and Security Considerations define several threat vectors and counter measurements. In that section 5.3.3. Store Secrets in Secure Storage 定义有关如何存储机密的最佳实践。
Most multi-user operating systems segregate the personal storage of different system users. Moreover, most modern smartphone operating systems even support the storage of application-specific data in separate areas of file systems and protect the data from access by other applications
鉴于您是 运行 基于 JavaScript 的前端应用程序,最好的方法是将访问令牌存储在 HTML5 web storage.
中它允许您在 API 调用需要时访问令牌。此外,如果浏览器实现是安全的(例如:- 包含所有安全补丁等),这将提供一个安全存储,拒绝访问其他应用程序。此外,您还可以选择使用 sessionStorage 来提供在选项卡关闭时删除访问令牌的额外安全性。
我最终使用全局变量将令牌存储在服务器上;
token = '';
Meteor.methods({
refreshToken: function () {
token = getToken();
...
});
现在
token
适用于所有方法。我还检查令牌是否仍然有效,如果有效期在 300 以内,我会刷新令牌 seconds.And 该部分的代码如下:
const EXPIRATION_WINDOW_IN_SECONDS = 300;
const expirationTimeInSeconds = token.expires_at.getTime() / 1000;
const expirationWindowStart = expirationTimeInSeconds - EXPIRATION_WINDOW_IN_SECONDS;
const nowInSeconds = (new Date()).getTime() / 1000;
const shouldRefresh = nowInSeconds >= expirationWindowStart;
if (shouldRefresh) {
try {
//refresh the token
} catch (error) {
console.log('Error refreshing access token: ', error.message);
}
}