一尘不染

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

angularjs

我有两个应用程序:

  • server ( REST API Server)
    • node js
    • Express
    • jsonwebtokens
    • express-jwt
    • mongoose
  • client (Portable Front-end)
    • bootstrap
    • Angular JS
    • local-storage
    • angular-facebook
    • angular-jwt

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

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

  1. Angular 客户端 有一个登录按钮
  2. 用户单击按钮> Facebook身份验证开始
  3. 客户端 收到user_id和FB访问令牌
  4. 客户端 将[ POST json正文 ] user_id和访问令牌都发送到位于 http://server.com/auth/login ”的 Node + Express Server
  5. 节点服务器* 已将express-jwt应用于除 / auth / login 之外的所有路由,并带有一个 *

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

var jwt = require(’jsonwebtoken’);

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

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

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

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

现在,我的问题是:

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

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


阅读 227

收藏
2020-07-04

共1个答案

一尘不染

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

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

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

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

2020-07-04