Meteor 我应该如何存储来自第三方api的访问令牌

Meteor 我应该如何存储来自第三方api的访问令牌,meteor,oauth-2.0,access-token,server-variables,Meteor,Oauth 2.0,Access Token,Server Variables,嗨,我正在使用meteorjs和第三方api在第三方数据库上创建用户 我使用oauth2获得访问令牌,令牌有2小时到期。 在使用异步函数获取访问令牌之后,我使用了两种不同的方法 然而,我不希望每次需要访问令牌时都调用异步函数,而是希望将其存储在服务器上,直到到期 安全地存储它们并在服务器上全局使用它们的最佳做法是什么 非常感谢您提前定义几种威胁向量和应对措施。在该部分中,定义如何存储机密的最佳实践 大多数多用户操作系统将个人存储隔离 不同的系统用户。此外,大多数现代智能手机都在运行 系统甚至支持

嗨,我正在使用meteorjs和第三方api在第三方数据库上创建用户

我使用oauth2获得访问令牌,令牌有2小时到期。 在使用异步函数获取访问令牌之后,我使用了两种不同的方法

然而,我不希望每次需要访问令牌时都调用异步函数,而是希望将其存储在服务器上,直到到期

安全地存储它们并在服务器上全局使用它们的最佳做法是什么

非常感谢您提前定义几种威胁向量和应对措施。在该部分中,定义如何存储机密的最佳实践

大多数多用户操作系统将个人存储隔离 不同的系统用户。此外,大多数现代智能手机都在运行 系统甚至支持将特定于应用程序的数据存储在 隔离文件系统的各个区域,并保护数据不被 其他应用

假设您正在运行基于JavaScript的前端应用程序,最好的方法是将访问令牌存储在中


它允许您在API调用需要时访问令牌。此外,如果浏览器实现是安全的(例如:-包含所有安全补丁等),这将提供一个安全存储,拒绝访问其他应用程序。在这里,您还可以选择使用sessionStorage来提供在选项卡关闭时删除访问令牌的附加安全性。

我最终使用全局变量将令牌存储在服务器上

token = '';

Meteor.methods({
  refreshToken: function () {
    token = getToken();
  ...
});
现在呢

token
适用于所有方法。我还检查令牌是否仍然有效,如果到期时间在300秒内,则刷新令牌。该部分代码如下:

    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);
           }
       }

一个很好的提示是当用户登录时Meteor如何存储auth令牌。你可以对其他代币模仿这个概念。谢谢你的回答,但是我认为我用错误的方式构造了这个问题。在我的例子中,客户机就是服务器。因此不涉及浏览器,不幸的是,服务器上没有会话存储。只有一个用户在使用api,这个用户就是服务器。