我正在使用 JWT 来保护节点 js urlhttps://github.com/auth0/express-jwt
要创建 JWT 令牌用户会话,我只需执行以下操作:
-> auth/signup
-> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/});
或者在登录呼叫的情况下
-> auth/login
-> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/});
每次调用受保护的网址时我都会检查req.user
这是由 JWT 中间件自动设置的。
现在我想知道:
1 - 调用sign()时JWT令牌存储在哪里?
2 - 每次调用受保护的网址时是否都必须验证()令牌?如果是的话为什么?
3 - 当我为已签名的用户设置新令牌时,旧令牌(如果存在)是否会被删除?如果没有设置有效期或者例如是5年怎么办?
4 - 为什么我无法在同一浏览器/应用程序页面上设置新令牌?
如果我注册新令牌但令牌匹配(我检查过),我会收到无效签名错误
就像我无法在同一浏览器上登录超过 1 个用户
您一定已经使用其他用户之前的回复找到了之前所有问题的答案,但我也会尝试为其他用户澄清一些问题:
1 - 调用sign()时JWT令牌存储在哪里?
当你呼号时,签名的令牌不会存储在任何地方,它是
由sign函数返回,然后你必须将其发送给客户端
这样in就可以存储在客户端了。 (例如会话存储,
本地存储或 cookie)
2 - 每次调用受保护的网址时我都必须验证()令牌吗?如果是的话为什么?
是的你是。这个想法是一旦客户端拥有令牌,他们就会发送
每次发出请求时向服务器发送令牌。令牌是
由服务器处理以确定特定客户端是否有
已经被认证了。
3 - 当我为已签名的用户设置新令牌时,旧令牌(如果存在)是否会被删除?如果没有设置有效期或者例如是5年怎么办?
与第1点的答案略有相关。调用sign函数
只会生成另一个令牌。令牌的过期时间是
存储在签名令牌本身内。所以每次服务器得到一个token
从客户端,它检查过期作为令牌的一部分
确认。需要注意的是,签名的令牌只是
您在执行过程中作为参数传入的“user_profile”对象
签名,加上额外的字段,例如添加到的到期日期
那个物体。
因此一个客户端可以在客户端存储多个令牌。他们
只要它们尚未过期,都将有效。但是,那
想法是仅在客户端已完成时才向客户端发送令牌
旧的过期后再次进行身份验证。
4 - 为什么我无法在同一浏览器/应用程序页面上设置新令牌?如果我注册一个新令牌但令牌匹配(我检查过),我会收到无效签名错误,就像我无法在同一浏览器上登录超过 1 个用户一样
这个想法是每个浏览器有 1 个用户。因为在这种情况下浏览器
是客户。我想不出您需要的用例
每个浏览器/客户端有多个用户,所以你显然在做
有事吗。这并不是说不可能发送多个
令牌到同一浏览器/客户端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)