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

Maintaining Secret key and Access Token for JWT in Express and NodeJS with Facebook in Rest API

我有两个申请:

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

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

  1. Angular 客户端 有一个登录按钮
  2. 用户点击按钮 > Facebook 身份验证开始
  3. 客户端 收到user_id 和 FB 访问令牌
  4. 客户端发送[POSTjsonbody]两者user_id和 Node+Express Server'http://server.com/auth/login'
  5. 的访问令牌
  6. Node Server 已将 express-jwt 应用于除 /auth/login 之外的所有路由

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

    var jwt = require('jsonwebtoken');

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

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

    对其进行签名

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

  8. Node Server 存储(更新,如果 user_id 存在)数据库中的新令牌并将其作为对 client[=93= 的响应发送]
  9. 客户端 将它收到的新令牌作为 json 数据存储在 local-storage
  10. 客户端使用 angular-jwt 从新令牌中获取配置文件数据,并自动在授权 header 中为它发送到服务器

现在,我的问题是:

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

我对设计流程和机制有点迷茫。

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

广告 2. 服务器端应用程序使用一个密钥生成所有 JWT 是一种常见做法。

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

JWT refresh token flow

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