Token认证的好处和坏处是什么?

本文探讨了Token作为访问资源凭据的优缺点。Token认证提供了跨域支持、无状态性和去耦合的优势,尤其适合移动应用。然而,它也存在占用带宽、无法在服务端注销以及增加性能开销等缺陷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

token 这里我们说的token,是指 访问资源的凭据 。使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是 这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在localStorage中
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就放行

1. 好处

那Token相对于Cookie的好处:

  • 支持跨域访问: Cookie是不允许垮域访问的,token支持
  • 无状态: token无状态,session有状态的
  • 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可.
  • 更适用于移动应用: Cookie不支持手机端访问的
  • 性能: 在网络传输的过程中,性能更好
  • 基于标准化: 你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在 多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如: Firebase,Google, Microsoft)

2 缺陷

说了那么多token认证的好处,但他其实并没有想象的那么神,token 也并不是没有问题。

1. 占带宽
正常情况下要比 session_id 更大,需要消耗更多流量,挤占更多带宽,假如你的网站每月有 10 万次的浏览器,就意味着要多开销几十兆的流量。听起来并不多,但日积月累也是不小一笔开销。实际上,许多人会在 JWT 中存储的信息会更多。
2. 无法在服务端注销,那么久很难解决劫持问题
3. 性能问题
JWT 的卖点之一就是加密签名,由于这个特性,接收方得以验证 JWT 是否有效且被信任。但是大多数 Web 身份认证应用中,JWT 都会被存储到 Cookie 中,这就是说你有了两个层面的签名。听着似乎很牛逼,但是没有任何优势,为此,你需要花费两倍的 CPU 开销来验证签名。对于有着严格性能要求的 Web 应用,这并不理想,尤其对于单线程环境。

### uuc-token 的定义与用途 #### 定义 uuc-token 是一种用于特定应用环境下的认证令牌,通常由一组字符组成,旨在验证用户的身份并授权其访问受保护资源。这种令牌可以视为一种临时凭证,在有效期内允许持有者执行被许可的操作。 #### 用途 在IT安全领域内,uuc-token 主要用作增强型的安全措施来加强系统的安全性: - **身份验证**:通过发放唯一的token给合法用户,确保只有经过授权的人才能进入系统或服务。 - **权限控制**:根据同用户的角色分配相应的token,从而实现细粒度的访问管理策略[^1]。 - **防止重放攻击**:由于每次登录都会生成新的token,并且具有时效性,这有助于抵御恶意第三方试图重复使用旧有的认证信息发起攻击的行为。 - **简化跨域资源共享(CORS)**:当涉及到多个子域名之间的交互时,可以通过统一颁发识别token的方式解决浏览器同源政策带来的限制问题。 ```python import jwt from datetime import datetime, timedelta def create_uuc_token(user_id, secret_key='your_secret'): payload = { 'exp': datetime.utcnow() + timedelta(days=7), # 设置过期时间 'iat': datetime.utcnow(), # 发行时间 'sub': user_id # 用户标识符或其他相关信息 } token = jwt.encode(payload, secret_key, algorithm='HS256') return token.decode('utf-8') # 返回编码后的字符串形式token ``` 此代码片段展示了一个简单的创建uuc-token的方法,其中包含了设置有效期、发行时间主体声明等功能。需要注意的是实际应用场景下还需要考虑更多因素如加密强度等以保障更高的安全性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值