当前位置: 首页 > 面试题库 >

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

仲阳朔
2023-03-14
问题内容

我有两个应用程序:

  • 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. 我需要何时何地检查令牌到期?以及如何刷新它?

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


问题答案:

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



 类似资料:
  • 我有两份申请: null null 这就是流在我的应用程序中的工作方式: > Angular客户端有一个登录按钮 用户单击按钮>Facebook Auth启动 客户端接收user_id和FB访问令牌 客户端在'http://Server.com/auth/login'将user_id和访问令牌发送[POST json body]到Node+Express服务器 节点服务器已将express-jwt

  • 我试图编译代码时遇到了这个异常。我已经安装了eclips工具包,我正在使用EclipseKepler 异常线程"main"java.lang.NoClassDefFoundError: org/apache/共用/日志/LogFactory在com.amazonaws.Amazon WebServiceClient.(Amazon WebServiceClient.java:56)在test_to

  • 我使用Oauth已经有一段时间了,但从来没有完全确定这四个术语之间的区别(以及每个术语的功能)。我经常看到(例如在Twitter公共API中) 消费者秘密: 和 但我从来都不知道他们到底在干什么。我知道Oauth有能力授权应用程序(让它们代表用户行事),但我不理解这四个授权条款之间的关系,希望得到解释。 基本上,我不确定访问令牌或令牌密钥是如何生成的,它们存储在哪里,以及它们之间或与使用者密钥和密

  • 因此,我尝试在浏览器上使用oauth使用者密钥、密钥、访问令牌和令牌密钥对rest客户端进行API调用,其工作正常,如下所示。 请告知如何在Java中实现这一点? http://imgur.com/AtYVLH5 所有oauth都显示了整个过程,但在第一次保存密钥和令牌后,如何进行API调用是个问题。 提前感谢

  • 我遇到了许多API,它们为用户提供了一个API密钥和一个秘密。但我的问题是:两者之间有什么区别? 在我看来,一把钥匙就足够了。假设我有钥匙,只有我和服务器知道。我用这个键创建了一个HMAC哈希,并进行了一个API调用。在服务器上,我们再次创建HMAC哈希,并将其与发送的哈希进行比较。如果是相同的,则呼叫经过身份验证。 那为什么要用两把钥匙呢? 编辑:或者该API密钥用于查找API机密?