我有两个应用程序:
- 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 时如何管理密钥?
这就是我的应用程序中的流程的工作原理:
- Angular client有一个登录按钮
- 用户单击按钮 > Facebook 身份验证启动
-
Client接收 user_id 和 FB 访问令牌
-
Client sends[POST json 正文] user_id 和访问令牌节点+Express服务器 at 'http://server.com/auth/login'
-
节点服务器已将express-jwt应用于除/验证/登录 with a
var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');
app.use(expressjwt({ Secret: ''}).unless({path: ['/auth/login']}));
-
节点服务器接收数据来自req.body,使用 JavascriptSDK 从 facebook 获取所有个人资料详细信息,并使用
var token=expressjwt.sign({profile}, );
-
节点服务器在数据库中存储(更新,如果 user_id 存在)新令牌并将其作为响应发送到client
-
client将收到的新令牌作为 json 数据存储在本地存储中
-
客户端使用 Angular-JWT从新令牌获取配置文件数据,并自动将新令牌附加到发送到服务器的所有请求的授权标头中
现在,我的问题是:
- 我真的需要将 JWT 令牌存储在数据库中吗?我当然不会将请求标头中的令牌与数据库进行比较
- 每次有人登录时,我是否需要生成随机密钥以确保安全?如果是,那么它如何适合客户端和服务器?
- 我需要在何时何地检查令牌是否过期?以及如何刷新它?
我对设计流程和机制有点迷失。
广告 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(使用前将#替换为@)