多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 概述 Bearer Token 是一种用于身份验证的访问令牌,它授权持有者(Bearer)访问资源的权限。当你向服务器发送请求时,你可以在请求头中携带`Bearer Token`,服务器会根据这个 Token 来验证你的身份并授权你所请求的操作。 它通常用于 OAuth 2.0 认证框架中,用来验证访问者的身份并授予其相应的权限。Bearer Token 是一种加密的字符串,客户端在每次请求时将其附加到 HTTP 请求头中,从而使服务器能够识别并授权该请求。 ## 基本概念 Bearer Token 是一种无状态的、短期的、可撤销的凭证,它被设计用来在客户端与服务器之间传递身份验证信息。所谓无状态,意味着服务器不需要保存任何关于 Bearer Token 的会话信息,只需要在收到请求时验证该 Token 的有效性。这样做的好处是减少了服务器的负担,提升了系统的扩展性。 Bearer Token 通常是由身份提供者(Identity Provider, IdP)生成的,这些身份提供者可以是 OAuth 2.0 的授权服务器。客户端通过特定的授权流程(如授权码流程、密码凭证流程等)获取 Bearer Token,之后便可在调用受保护资源时使用该 Token。 ## 工作原理 当用户成功登录后,服务器会生成一个`Bearer Token`并返回给客户端,客户端随后在发起请求时,会在 HTTP 头部包含这个 Token。 `Bearer Token`在请求头中以 Bearer 关键字加上令牌本身的形式发送,格式通常为`Authorization: Bearer <token>`。服务器接收到请求后,会检查请求头中的 Authorization 字段,如果它以 Bearer 关键字开头,服务器就会提取出后面的令牌,并使用令牌来验证请求的合法性和授权级别,确认无误后提供请求的资源。 ~~~ +-----------------------------+ +-----------------------------+ | | | | | 用户登录 | | 服务器生成 Bearer Token | | | | | +-----------------------------+ +--------------+--------------+ | | v v +-----------------------------+ +--------------+--------------+ | | | | | | | | | 客户端发起请求 +---------> Bearer Token 发送给客户端 | | | | | | | | | +-----------------------------+ +--------------+--------------+ | v +--------------+--------------+ | | | | | 客户端发起请求并携带 | | Bearer Token | | | | | +--------------+--------------+ | v +--------------+--------------+ | | | | | 服务器接收请求并验证 | | Bearer Token | | | | | +--------------+--------------+ | v +--------------+--------------+ | | | | | 服务器返回资源给客户端 | | | | | +--------------+--------------+ ~~~ ## 使用示例 ### 客户端请求授权 客户端向授权服务器发送请求,获取访问 Token。这个请求可能是这样的: ``` POST /oauth/token HTTP/1.1 Host: auth.example.com Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=your_client_id&client_secret=your_client_secret ``` 在这个请求中,`grant_type`表示授权类型,`client_id`和`client_secret`是客户端的凭证。 ### 授权服务器颁发 Token 授权服务器验证客户端的凭证后,生成一个 Bearer Token 并返回给客户端: ```json { "access_token": "eyJhbGciOiJIUzI1NiIsxxxsw5c", "token_type": "bearer", "expires_in": 3600 } ``` 在这个响应中,`access_token`是 Bearer Token,`token_type`表示令牌类型(此处为`bearer`),`expires_in`表示令牌的有效期(以秒为单位)。 ### 客户端使用 Token 访问资源 客户端在每次请求受保护的资源时,将 Bearer Token 放在请求头中。例如,客户端想要访问`api.example.com`上的某个受保护的资源: ```json GET /api/resource HTTP/1.1 Host: api.example.com Authorization: Bearer eyJhbGciOiJIUzI1NiIsxxxsw5c ``` 在这个请求中,`Authorization`头包含了`Bearer`关键字和 Bearer Token。 ### 资源服务器验证 Token 资源服务器在收到请求后,会解析并验证 Bearer Token。如果 Token 有效且未过期,服务器会处理请求并返回相应的资源;如果 Token 无效或已过期,服务器会返回 401 未授权错误。 ``` HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "code": 0, "msg": "唯一凭证密钥格错误", "data": {} } ``` ### Bearer Token 的优点 > Bearer Token 作为一种认证机制,有许多优点: 1. **简单易用**:Bearer Token 通过 HTTP 请求头进行传输,使用起来非常简单,不需要复杂的会话管理。 2. **无状态**:Bearer Token 是无状态的,服务器不需要存储会话信息,减少了服务器的负担,提高了系统的扩展性。 3. **灵活**:Bearer Token 可以在不同的客户端和服务器之间传递,适用于多种场景和平台。 4. **安全性**:通过使用 HTTPS 传输,Bearer Token 的安全性得到了保障。同时,Token 本身可以包含加密的信息,进一步提升了安全性。 ### Bearer Token 的安全考虑 > 尽管 Bearer Token 有许多优点,但在实际应用中仍需注意其安全性。以下是一些关键的安全考虑: 1. **使用 HTTPS**:Bearer Token 必须通过 HTTPS 传输,以防止 Token 在传输过程中被窃取。 2. **短期有效性**:Bearer Token 通常设置为短期有效,以减少 Token 被盗后的风险。可以结合刷新 Token 机制来延长用户会话。 3. **限制 Token 权限**:Bearer Token 应该尽可能限制其权限,只授予客户端所需的最小权限。 4. **监控和撤销 Token**:服务器应监控 Bearer Token 的使用情况,发现异常行为时应立即撤销相应的 Token。 5. **保护 Token 存储**:客户端应妥善保护存储 Bearer Token 的位置,防止 Token 被恶意软件或其他攻击者窃取。 ## 前端如何使用 在发送请求时,将其携带在请求头(Header)的 `Authorization` 字段中,其字段值为 `Bearer` 关键字加上令牌本身。 > 以下以 JavaScript 的 Axios 库为例 ~~~ const axios = require('axios') const url = 'https://api.example.com/data' // 替换为你要访问的 API 地址 const token = 'your_bearer_token' // 替换为你的 Bearer Token axios .get(url, { headers: { Authorization: 'Bearer ' + token, }, }) .then(function (response) { console.log('请求成功:', response.data) }) .catch(function (error) { console.error('请求失败:', error) }) ~~~ > 以下以 Postman 请求为例 ![](https://img.kancloud.cn/00/13/001398f87d895033d3cf679000a7b21a_1142x245.png)