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

2023-11-26

我有两个应用程序:

  • server ( REST API Server)
    • node js
    • Express
    • jsonwebtokens
    • 快递-jwt
    • mongoose
  • client (Portable Front-end)
    • 引导程序
    • 角JS
    • 本地存储
    • 角度 Facebook
    • 角度 JWT

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

这就是我的应用程序中的流程的工作原理:

  1. Angular client有一个登录按钮
  2. 用户单击按钮 > Facebook 身份验证启动
  3. Client接收 user_id 和 FB 访问令牌
  4. Client sends[POST json 正文] user_id 和访问令牌节点+Express服务器 at 'http://server.com/auth/login'
  5. 节点服务器已将express-jwt应用于除/验证/登录 with a

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

    var jwt = require('jsonwebtoken');

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

  6. 节点服务器接收数据来自req.body,使用 JavascriptSDK 从 facebook 获取所有个人资料详细信息,并使用

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

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

现在,我的问题是:

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

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


广告 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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐