【AIcoding技术必知必会】8问--token是什么?

基本介绍

Token(令牌)是一种用于身份验证和授权的凭证,它通常是一个加密的字符串,通常包含用户信息、过期时间等数据。相比传统的session认证,token更适合现代分布式系统和移动应用。

请以JWT为例,详情说明一下Token的组成,分为三部分组成,每部分用点(.)分隔:Header.Payload.Signature

  • Header(头部):
{
  "alg": "HS256",  // 签名算法
  "typ": "JWT"     // token类型
}
  • Payload(负载):
{
  "sub": "1234567890",    // 用户ID
  "name": "John Doe",     // 用户信息
  "iat": 1516239022,     // 签发时间
  "exp": 1516242622      // 过期时间
}
  • Signature(签名):
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

请以JWT为例,详情说明一下Token的使用流程,

  • 用户登录阶段:
// 1. 客户端发送登录请求
POST /api/login
{
  "username": "user@example.com",
  "password": "password123"
}

// 2. 服务器验证并生成JWT
const jwt = {
  header: {
    "alg": "HS256",
    "typ": "JWT"
  },
  payload: {
    "userId": "123",
    "username": "user@example.com",
    "exp": new Date().getTime() + 3600000 // 1小时后过期
  }
}

// 3. 服务器返回JWT
{
  "token": "eyJhbGciOiJIUzI1...",
  "expires_in": 3600
}
  • 使用JWT访问受保护资源:
// 客户端发送请求,在header中携带JWT
GET /api/protected-resource
Authorization: Bearer eyJhbGciOiJIUzI1...

// 服务器验证流程:
1. 提取token
2. 验证签名
3. 检查是否过期
4. 验证token中的声明(claims)
5. 授权访问资源

常见Token类型

类型

特点

适用

优势

劣势

JWT (JSON Web Token)

自包含的token,包含三部分:header、payload和signature

Web API认证

  • 可以包含用户信息和元数据

  • 不需要在服务器存储状态

  • 可以跨域使用

  • token大小相对较大

  • 一旦签发无法撤销(除非过期)

Access Token

短期有效的访问令牌

用于访问受保护的资源和API

  • 安全性高,有效期短

  • 可以随时撤销

  • 需要频繁刷新

  • 可能需要额外的存储机制

Refresh Token

长期有效的更新令牌

用于获取新的Access Token

  • 提高安全性

  • 减少用户重复登录

  • 需要额外的存储和管理

  • 增加了系统复杂性

Bearer Token

简单的字符串token

HTTP请求认证

  • 使用简单

  • 广泛支持

  • 安全性相对较低

  • 需要额外的安全措施

Session Token

服务器端存储的会话标识

传统的Web应用会话管理

  • 可以即时失效

  • 服务器完全控制

  • 需要服务器存储

  • 扩展性差

API Key

静态的访问密钥

API访问认证

  • 使用简单

  • 永久有效

  • 安全性较低

  • 不适合用户认证

SAML Token

XML格式的安全断言

企业级单点登录(SSO)

  • 企业级安全

  • 支持复杂的认证场景

  • 配置复杂

  • 较重量级

选择建议

  1. Web应用推荐使用JWT + Refresh Token的组合

  2. 微服务间通信可以使用JWT或Bearer Token

  3. 企业应用考虑SAML Token

  4. 简单API集成可以使用API Key

  5. 移动应用推荐Access Token + Refresh Token的组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值