在Rest API中使用Facebook维护Express和NodeJS中的JWT的密钥和访问令牌
我有两个应用程序:
- 服务器(REST API服务器)
- 节点js
- performance
- jsonwebtokens
- 表示,智威汤逊
- mongoose
- 客户端(Portable Front-end)
- 引导
- Angular JS
- 本地存储
- angular的Facebook
- angularJWT
晚些时候,客户端应用程序将移植到Android,iPhone和其他平台使用phonegap。 对于OAuth,我使用Facebook作为提供者。 现在,我刚刚意识到JSON Web Tokens是这种设置的方式。 我的问题是一个体系结构,而不是语法 – 如何在nodejs中使用JWT签署Facebook访问令牌和用户ID时pipe理密钥?
所以这是如何在我的应用程序的stream程:
- Angular 客户端有一个loginbutton
- 用户单击button> Facebook身份validation启动
- 客户端收到user_id和FB访问令牌
- 客户端发送[ POST JSON主体 ] user_id和访问令牌到Node + Express服务器在' http://server.com/auth/login '
-
节点服务器已经将express-jwt应用于除/ auth / login之外的所有路由
var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');
app.use(expressjwt({secret:''})。unless({path:['/ auth / login']}));
-
节点服务器从req.body接收数据,使用JavascriptSDK从Facebook获取所有configuration文件的详细信息,并使用它签名
var token = expressjwt.sign({profile},);
- 节点服务器存储(如果存在user_id,则更新)新令牌,并将其作为响应发送给客户端
- 客户端将其作为json数据接收到的新令牌存储在本地存储中
- 客户端使用angular-jwt从新令牌获取configuration文件数据,并自动将新令牌附加到授权标头中,以发送给服务器的所有请求
现在,我的问题是:
- 我真的需要将JWT令牌存储在数据库中吗? 我当然不会将请求头中的标记与数据库进行比较
- 每次有人login时,是否需要为安全生成随机密钥? 如果是的话,那么如何适合客户端和服务器呢?
- 何时何地需要检查令牌过期? 如何刷新它?
我对devisestream程和机制感到迷茫。
广告1.您不必将JWT存储在数据库中。 用户ID可以是有效载荷的一部分,因此不需要它。
广告2.服务器端应用程序通常使用一个密钥来生成所有JWT。
广告3.检查每个API请求是否已经过期,并且如果令牌已过期则不允许访问,则返回401状态代码。 客户端应用程序应提示用户input凭据并请求新的JWT。 如果您想避免用户重新提交凭据,则可以发出刷新令牌,稍后可用于生成新的JWT。
JWT刷新令牌stream