JWT 客户端凭证授予的存储位置

Posted

技术标签:

【中文标题】JWT 客户端凭证授予的存储位置【英文标题】:Where to store the JWT Client Credentials Grant 【发布时间】:2018-05-24 20:14:36 【问题描述】:

我有一个 NodeJS Express 应用程序,它通过客户端凭据授予对 Auth 服务器进行身份验证。我收到的令牌用于从 API 加载数据。

在整个应用程序中存储令牌的最佳做法是什么?

请注意,JWT 不是特定于用户的,因为我的 Express 应用程序是客户端。

【问题讨论】:

【参考方案1】:

我会将它存储在内存中。通常我会写一个单例模块来处理它。

auth.js:

class Auth 
    getToken() 
        // check if we has token already and that token isn't expired
        if (this.token && !isExpired(this.token)) 
            return Promise.resolve(this.token);
        
        // if not we call API for the new token then return the new token
        return asyncCallApiForToken();
    

module.exports = new Auth();

main.js

const auth = require('./auth.js)

auth.getToken()
    .then(token => 
        // we got token here
    

【讨论】:

【参考方案2】:

我会尽量避免持久化返回的令牌,只将其保存在内存中,因为客户端凭据授予使您能够相对轻松地获取新令牌,而无需用户交互。

但如果这有问题,那么我会说:在客户端凭据旁边,因为客户端凭据至少与 JWT 令牌一样敏感。

【讨论】:

以上是关于JWT 客户端凭证授予的存储位置的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2:JWT授权授予和客户端凭据授权与JWT客户端身份验证之间的区别是什么?

在客户端存储 JWT 令牌的位置以及如何保护它? [复制]

在基于 Web 浏览器的客户端上存储授权(或 JWT)令牌的位置?

如何在使用客户端凭据授予流程时在 JWT 令牌中附加或包含用户身份(用户名或电子邮件地址)

SESSION和JWT

jwt 实践应用以及特殊案例思考