使用jwt能控制人数吗
JWT是JSON Web令牌的缩写。 JSON Web令牌(JWT)是一个开放标准( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。
由于此信息是经过数字签名的,因此可以进行验证和信任。 可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名 。
授权 :这是使用JWT的最常见方案。 一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。 单一登录是当今广泛使用JWT的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。
那么,为什么要使用JWT?
1.无状态
JWT支持无状态服务器REST原理。 在这种情况下,服务器不会存储来自同一客户端的不同呼叫的会话信息,因此可以在每个呼叫中将JWT作为授权标头发送,从而无需在服务器上跟踪会话信息。
2.去耦/去中心化
JWT不需要中央系统来验证每个请求。 令牌可以在任何地方进行验证,甚至可以在库和util类中进行验证。
3.支持索赔
我们可以将称为“ claims”的JSON数据放入令牌中。 可以将用户详细信息(例如ID,用户名,角色和特权)捆绑在令牌中,从而减少了从后端服务器获取此信息所需的网络调用。
4.自动过期
可以将JWT编程为在给定的到期时间内到期。 因此,我们不需要在后端数据库中管理令牌的生命周期,实际上,不建议将JWT存储在持久数据库中。 过期的JWT令牌,如果被解码,将抛出粗糙的异常。
JWT是无状态的,分散的,它们支持令牌中的声明,并且它们自动过期。
但是,也有一些缺点
1.庞大
JWT的内存效率不高。 特别是,当您在令牌中使用自定义声明时,令牌的大小可能会膨胀到无法存储在Cookie中的程度。
2.透明
令牌声明不能被篡改,但是声明仅在令牌的中间部分进行了base64编码,因此可以轻松对其进行解码。
3.过时的数据
令牌中的数据可能会过时,并且可能不再反映数据库中数据的最新版本。
4.过时的令牌
您不能使单个JWT无效,因为您不应将它们存储在持久性存储中。 这意味着您不能确定用户是否已退出任何系统。
因此,JWT是无状态的,分散的,支持令牌内的声明,并且它们会自动过期。 但是,它们又大又透明,并且容易过时。
我们如何减轻不利条件?
- 减少TTL,请始终创建寿命短(30分钟)的令牌。
- 经常刷新令牌。
- 仅当用户与您的网站保持互动时才刷新。
- 将资源标识符而不是资源本身存储为令牌内的声明。
- 不要在令牌中保留敏感数据,例如用户的登录凭据。将令牌的大小保持在4KB以下!
翻译自: https://hackernoon.com/wtf-are-jwt-tokens-and-should-you-use-them-5o273ydv
使用jwt能控制人数吗