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
是客户端的凭证。
授权服务器验证客户端的凭证后,生成一个 Bearer Token 并返回给客户端:
{
"access_token": "eyJhbGciOiJIUzI1NiIsxxxsw5c",
"token_type": "bearer",
"expires_in": 3600
}
在这个响应中,access_token
是 Bearer Token,token_type
表示令牌类型(此处为bearer
),expires_in
表示令牌的有效期(以秒为单位)。
客户端在每次请求受保护的资源时,将 Bearer Token 放在请求头中。例如,客户端想要访问api.example.com
上的某个受保护的资源:
GET /api/resource HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsxxxsw5c
在这个请求中,Authorization
头包含了Bearer
关键字和 Bearer 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 有许多优点,但在实际应用中仍需注意其安全性。以下是一些关键的安全考虑:
在发送请求时,将其携带在请求头(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 请求为例