在当今 API 驱动的世界中,保护应用程序至关重要。在众多身份验证方法中,Bearer Token Authentication 以其简单性和有效性而脱颖而出。无论您是构建移动应用程序、微服务架构还是集成第三方 API,了解 Bearer Token 都至关重要。本指南通过实际示例和可作提示介绍了您需要了解的所有内容(从基础知识到最佳实践)。让我们开始吧!

什么是不记名令牌?(通往数字王国的钥匙)

想象一下,住在一家酒店,一张钥匙卡就可以进入您的房间、健身房和游泳池。您无需每次都出示 ID,只需刷卡即可。Bearer Token 的工作原理与数字系统类似。

Bearer Token 是服务器生成的一串字符 (如 ),用于验证请求。当客户端(例如,移动应用程序)在 HTTP Authorization 标头中发送此令牌时,服务器会对其进行验证,并在有效时授予对受保护资源的访问权限。eyJhbGci...

不记名令牌的主要特点

  • Stateless:

    服务器不存储令牌。相反,令牌是自包含的(例如,带有嵌入数据的 JWT)或通过加密技术进行验证。

  • 短期:

    令牌会很快过期(几分钟到几小时),以降低泄露的风险。

  • 简单集成:

    只需将令牌附加到请求,无需复杂的会话管理。

不记名令牌身份验证的工作原理:3 步过程

步骤 1:获取 Token

客户端使用凭证(例如,用户名/密码、OAuth 2.0)向授权服务器进行身份验证。例如,使用 OAuth 2.0 客户端凭证流进行服务器到服务器通信:

curl -X POST https://auth.example.com/token \
  -H "Content-Type: application/json" \
  -d '{"client_id": "your_id", "client_secret": "your_secret"}'
 

服务器使用令牌进行响应:

{
  "access_token": "xyz123",
  "expires_in": 3600,
  "token_type": "Bearer"
}
 

第 2 步:在 API 请求中使用令牌

客户端将令牌包含在后续请求的 Authorization 标头中:

curl -X GET https://api.example.com/user \
  -H "Authorization: Bearer xyz123"
 

第 3 步:服务器端验证

服务器:

  • 从标头中提取令牌
  • 验证它:
    • 对于 JWT:验证签名、过期 ()、颁发者 () 和受众 ()。expissaud
    • 对于不透明令牌:根据数据库或内省终端节点进行检查。
  • 根据有效性授予或拒绝访问权限

不记名令牌在哪里使用?

Bearer Token 为不同场景中的现代应用程序提供支持:

  • API 身份验证:

    安全的 RESTful API(例如 Twitter、GitHub、Stripe)。

    示例:从第三方 API 获取天气预报的天气应用。

  • 单页应用程序 (SPA):

    用户登录后,SPA(React、Vue)使用令牌对 API 调用进行身份验证,而无需重新加载页面。

  • 微服务通信:

    服务使用令牌而不是共享凭据来相互验证。

  • OAuth 2.0 和 OpenID Connect:

    不记名令牌通过充当 OAuth 2.0 访问令牌来启用委托访问(例如,“使用 Google 登录”)。

不记名令牌与替代方案:您应该使用哪个?

方法 优点 缺点
不记名令牌 短期、OAuth 就绪、无状态 需要 HTTPS;令牌盗窃 = 访问权限
API 密钥 易于实施 长寿;难以撤销
基本身份验证 内置于 HTTP 中 在每个请求中发送 base64 编码的凭据

何时选择 Bearer Tokens:

  • 构建可扩展的无状态 API。
  • 集成 OAuth 2.0 或 OpenID Connect。
  • 需要短期的精细访问。

安全最佳实践:保护您的代币!

  1. 在所有地方

    强制实施通过 HTTP 发送的令牌容易受到拦截。HTTPS 对传输中的数据进行加密。

  2. 安全地存储令牌

    • 前端:避免使用 localStorage (XSS 风险)。使用 httpOnly cookie 或安全会话存储。
    • 后端:加密存储的令牌并使用 Secrets Manager(例如 AWS Secrets Manager)。
  3. Keep Tokens Short-Lived

    将过期时间设置为 1-2 小时。使用刷新令牌续订访问权限,无需用户交互。

  4. 使用范围
    限制令牌权限
    定义范围(例如, , )以限制令牌可以执行的作。read:datawrite:data

  5. 轮换和撤销代币

    • 旋转:定期发行新令牌。
    • 撤销:维护令牌阻止列表或使用有效期较短的 JWT。
  6. 彻底验证令牌

    • 对于 JWT:验证加密签名并检查标准声明 (、、)。 使用 (Node.js) 或 (Python) 等库。expissaudjsonwebtokenPyJWT

要避免的常见错误

错误 1:在 URL 中公开令牌

🚫 坏:

https://api.example.com/data?token=xyz123
 

✅ 修复:

始终使用 Authorization 标头。

错误 2:忽略令牌过期

🚫 错误:

使用永不过期的令牌。

✅ 修复:

设置合理的值并自动刷新逻辑。exp

错误 3:在代码中对令牌进行硬编码

🚫 坏:

const API_TOKEN = "xyz123"; // Exposed in source control!
 

✅ 修复:

使用环境变量或 Secret 管理器。

不记名令牌的实际应用:JWT 深入探讨

大多数不记名令牌是 JSON Web 令牌 (JWT),它由三个部分组成:

标头(算法和令牌类型):

{
  "alg": "HS256",
  "typ": "JWT"
}
 

有效负载(有关用户和令牌的声明):

{
  "sub": "user_123",
  "name": "Alice Smith",
  "exp": 1716239022
}
 

签名:

计算如下:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key)
 

验证的工作原理:

服务器使用其密钥重新计算签名。如果它与 Token 的签名匹配,则 Token 有效。

简化 Bearer Token 管理的工具

  • APY Hub 目录:使用预构建的 API 大规模生成、验证和管理令牌。
  • JWT 签名:安全地对令牌进行签名和验证。
  • OAuth 集成:简化 OAuth 2.0 流程。
  • 令牌自省:以编程方式检查令牌有效性。
  • 邮差:使用 Bearer Tokens 轻松测试 API。
  • Auth0 中:用于基于令牌的身份验证的强大身份平台。
  • JWT.io:免费调试和检查 JWT。

结论

Bearer Token Authentication 是现代安全性的基石,它在简单性与强大的保护之间取得了平衡。通过遵守最佳实践(例如强制执行 HTTPS、使用短期令牌和利用 ApyHub 等工具),您可以保护您的 API 并专注于构建出色的用户体验。

如果我的 Bearer Token 被盗怎么办?

  • 短期到期:尽量减少曝光时间。
  • HTTPS 的 URL:防止拦截。
  • 撤销:通过阻止列表使被盗用的令牌失效。

不记名令牌和 JWT 是否相同?

不。Bearer Tokens 是指身份验证方法,而 JWT 是一种可用作 Bearer Tokens 的令牌。

如何刷新过期的令牌?

使用刷新令牌(有效期很长)获取新的访问令牌,而无需重新进行身份验证。

服务器可以使用 Bearer Token 相互通信吗?

是的,使用 OAuth 2.0 客户端凭证流进行安全的服务器到服务器通信。

为什么不直接使用 API 密钥呢?

API 密钥通常缺乏过期时间、范围和标准化,这使得它们对于现代应用程序来说风险更大。

 

出处:https://dev.to/

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
意见
建议
发表
评论
返回
顶部