angularjs - 在 Rest API 中使用 Facebook 在 Express 和 NodeJS 中维护 JWT 的 key 和访问 token

标签 angularjs node.js facebook express jwt

我有两个应用程序:

  • 服务器(REST API 服务器)
    • Node js
    • express
    • jsonwebtokens
    • express-jwt
    • Mongoose
  • 客户端(可移植前端)
    • 引导
    • Angular JS
    • 本地存储
    • Angular Facebook
    • Angular -jwt

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

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

  1. Angular 客户端有一个登录按钮
  2. 用户点击按钮 > Facebook Auth 开始
  3. 客户接收 user_id 和 FB Access Token
  4. Client 将 [POST json body] user_id 和 Access Token 发送到 ' http://server.com/auth/loginNode+Express Server '
  5. Node Server 已将 express-jwt 应用于除 /auth/login 之外的所有路由,并带有

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

    var jwt = require('jsonwebtoken');

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

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

    对其进行签名

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

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

现在,我的问题是:

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

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

最佳答案

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

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

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

JWT refresh token flow

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

关于angularjs - 在 Rest API 中使用 Facebook 在 Express 和 NodeJS 中维护 JWT 的 key 和访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418665/

相关文章:

javascript - Chrome 中的 AngularJS CORS 问题 - 请求的资源上不存在 'Access-Control-Allow-Origin' header

node.js - 我得到 - "TypeError: Client was passed a null or undefined query at Client.query",即使我的代码中没有 null 或 undefined

javascript - 如何向客户端显示上传的图片?

ios - 我们可以定制facebook sdk框架吗?

javascript - Angular Material - 大型浏览器上的 md-datepicker 显示问题

javascript - 无法查找 View Node JavaScript

javascript - 如何处理 Node js 中与内存分配相关的危机?

php - 必须使用事件访问 token 来查询有关当前用户的信息 |访问 token 似乎有效

facebook - 将 FB 开放图操作、对象和聚合从开发应用程序迁移到生产应用程序

angularjs - 使用 md-virtual-repeat 和 md-virtual-repeat-container 的可折叠组标题