作者:micheals | 来源:互联网 | 2023-05-22 18:02
我有两个应用程序:
服务器(REST API服务器)
节点js
表达
jsonwebtokens
表示,智威汤逊
猫鼬
客户端(便携式前端)
引导
Angular JS
本地存储
角的Facebook
角JWT
稍后,客户端应用程序将使用phonegap移植到Android,iphone和其他平台.对于OAuth,我使用Facebook作为提供者.现在,我刚刚意识到JSON Web Tokens是实现这种设置的方法.我的问题是架构问题而不是语法问题 - 如何在nodejs中使用JWT签署facebook访问令牌和用户ID时管理密钥?
这就是我的应用程序中流程的工作方式:
Angular 客户端有一个Login按钮
用户单击按钮> Facebook Auth启动
客户端接收user_id和FB访问令牌
客户端发送[ POST JSON体 ]既USER_ID和访问令牌节点+ Express服务器在" http://server.com/auth/login "
节点服务器已申请快递,智威汤逊的所有航线除/认证/注册用
var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');
app.use(expressjwt({secret:''}).除非({path:['/ auth/login']}));
节点服务器从req.body接收数据,使用JavascriptSDK从facebook获取所有配置文件详细信息,并使用它进行签名
var token = expressjwt.sign({profile},);
节点服务器在db中存储(更新,如果user_id存在)新令牌并将其作为响应发送给客户端
客户端将其作为json数据接收的新令牌存储在本地存储中
客户端使用angular-jwt从新令牌获取配置文件数据,并自动将新令牌附加到Authorization标头中,以用于发送到服务器的所有请求
现在,我的问题是:
我真的需要将JWT令牌存储在数据库中吗?我当然不会将请求标头中的标记与数据库进行比较
每次有人登录时,是否需要为安全性生成随机密钥?如果是,那么客户端和服务器如何适合?
我何时何地需要检查令牌到期?以及如何刷新它?
我对设计流程和机制感到很失望.
1> M.M...:
广告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/