在Rest API中使用Facebook维护Express和NodeJS中JWT的密钥和访问令牌

Abh*_*Deb 15 facebook node.js express jwt angularjs

我有两个应用程序:

  • 服务器(REST API服务器)
    • 节点js
    • 表达
    • jsonwebtokens
    • 表示,智威汤逊
    • 猫鼬
  • 客户端(便携式前端)
    • 引导
    • Angular JS
    • 本地存储
    • 角的Facebook
    • 角JWT

稍后,客户端应用程序将使用phonegap移植到Android,iphone和其他平台.对于OAuth,我使用Facebook作为提供者.现在,我刚刚意识到JSON Web Tokens是实现这种设置的方法.我的问题是架构问题而不是语法问题 - 如何在nodejs中使用JWT签署facebook访问令牌和用户ID时管理密钥?

这就是我的应用程序中流程的工作方式:

  1. Angular 客户端有一个Login按钮
  2. 用户单击按钮> Facebook Auth启动
  3. 客户端接收user_id和FB访问令牌
  4. 客户端发送[ POST JSON体 ]既USER_ID和访问令牌节点+ Express服务器" http://server.com/auth/login "
  5. 节点服务器已申请快递,智威汤逊的所有航线除/认证/注册

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

    var jwt = require('jsonwebtoken');

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

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

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

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

现在,我的问题是:

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

我对设计流程和机制感到很失望.

M.M*_*.M. 13

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

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

广告3.检查每个API请求的令牌是否已过期,如果令牌已过期,则禁止访问,返回401状态码.客户端应用应提示用户提供凭据并请求新的JWT.如果您想避免用户重新提交凭据,您可以发出一个刷新令牌,以后可用于生成新的JWT.

JWT刷新令牌流

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