双token优点_深入了解jwt方案的优缺点

JWT认证相比Session有无状态、防止CSRF攻击、适合移动端等优势,但也存在注销登录后token仍有效、占用带宽等问题。解决方案包括使用内存数据库维护黑名单、双token策略等。
摘要由CSDN通过智能技术生成

@

Token 认证的优势

相比于 Session 认证的方式来说,使用 token 进行身份认证主要有下面三个优势:

1.无状态

token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。但是,也正是由于 token 的无状态 ,

也导致了它最大的缺点:当后端在token 有效期内废弃一个 token 或者更改它的权限的话,不会立即生效,一般需要等到有效期过后才可以。另外,当用户 Logout 的话,token 也还有效。除非,我们在后端增加额外的处理逻辑。

2.有效避免了CSRF 攻击

CSRF(Cross Site Request Forgery) 一般被翻译为 跨站请求伪造,属于网络攻击领域范围。相比于 SQL 脚本注入、XSS等等安全攻击方式,CSRF 的知名度并没有它们高。但是,它的确是每个系统都要考虑的安全隐患,就连技术帝国 Google 的 Gmail 在早些年也被曝出过存在 CSRF 漏洞,这给 Gmail 的用户造成了很大的损失。

那么究竟什么是 跨站请求伪造 呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:

小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了10000元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小壮的身份给银行发送了一个转账请求,也就是通过你的 Cookie 向银行发出请求。

科学理

要创建一个 client_secret_jwt token,你需要遵循一些步骤。首先,你需要获取 client_id 和 client_secret,这是你的应用程序在身份提供者注册时分配的凭据。接下来,你需要使用这些凭据生成一个 JSON Web Token (JWT)。 以下是一个示例代码,展示了如何使用 Python 中的 PyJWT 库来创建 client_secret_jwt token: ```python import jwt from datetime import datetime, timedelta # 设置 JWT 的有效期 expiration = datetime.utcnow() + timedelta(minutes=5) # 构建 JWT 的 payload payload = { "iss": "your_client_id", # 发行人 (client_id) "sub": "your_client_id", # 主题 (client_id) "aud": "https://identityprovider.com/oauth2/token", # 受众 (token endpoint) "exp": expiration.timestamp(), # 过期时间戳 "nbf": datetime.utcnow().timestamp() # 生效时间戳 } # 使用 client_secret 签名生成 JWT client_secret = "your_client_secret" algorithm = "HS256" # 使用 HS256 算法进行签名 jwt_token = jwt.encode(payload, client_secret, algorithm) print(jwt_token) ``` 请确保将上述代码中的 "your_client_id" 和 "your_client_secret" 替换为你的实际凭据。 此代码示例使用 PyJWT 库来生成 JWT,并使用 HS256 算法进行签名。生成的 JWT 包含了发行人、主题、受众、过期时间和生效时间等信息。 请注意,实际使用时,你可能需要根据你的身份提供者的要求进行适当的调整,例如更改有效期或添加其他必需的声明。 希望这可以帮助到你!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值