在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程:

  1. Angular 客户端有一个loginbutton
  2. 用户单击button> Facebook身份validation启动
  3. 客户端收到user_id和FB访问令牌
  4. 客户端发送[ POST JSON主体 ] user_id和访问令牌到Node + Express服务器' http://server.com/auth/login '
  5. 节点服务器已经将express-jwt应用于除/ auth / login之外的所有路由

    var expressJwt = require('express-jwt');

    var jwt = require('jsonwebtoken');

    app.use(expressjwt({secret:''})。unless({path:['/ auth / login']}));

  6. 节点服务器req.body接收数据,使用JavascriptSDK从Facebook获取所有configuration文件的详细信息,并使用它签名

    var token = expressjwt.sign({profile},);

  7. 节点服务器存储(如果存在user_id,则更新)新令牌,并将其作为响应发送给客户端
  8. 客户端将其作为json数据接收到的新令牌存储在本地存储中
  9. 客户端使用angular-jwt从新令牌获取configuration文件数据,并自动将新令牌附加到授权标头中,以发送给服务器的所有请求

现在,我的问题是:

  1. 我真的需要将JWT令牌存储在数据库中吗? 我当然不会将请求头中的标记与数据库进行比较
  2. 每次有人login时,是否需要为安全生成随机密钥? 如果是的话,那么如何适合客户端和服务器呢?
  3. 何时何地需要检查令牌过期? 如何刷新它?

我对devisestream程和机制感到迷茫。

广告1.您不必将JWT存储在数据库中。 用户ID可以是有效载荷的一部分,因此不需要它。

广告2.服务器端应用程序通常使用一个密钥来生成所有JWT。

广告3.检查每个API请求是否已经过期,并且如果令牌已过期则不允许访问,则返回401状态代码。 客户端应用程序应提示用户input凭据并请求新的JWT。 如果您想避免用户重新提交凭据,则可以发出刷新令牌,稍后可用于生成新的JWT。

JWT刷新令牌stream

http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/