OAuth2.0 认证与授权

有一个项目采用 OAuth2.0 标准进行认证与授权,JWT(JSON Web Token)作为访问令牌(Access Token)进行用户身份验证和权限控制。

认证

认证流程如下:

  1. 用户通过登录界面提交用户名和密码。
  2. 服务器验证用户凭据,若验证通过,生成 JWT 访问令牌。
  3. 服务器将 JWT 返回给客户端,客户端存储该令牌(通常存在浏览器的本地存储或内存中)。
  4. 客户端在后续的 API 请求中,将 JWT 作为 Bearer Token 放在 HTTP 请求头的 Authorization 字段中发送给服务器。

授权

授权流程如下:

  1. 服务器在接收到客户端请求时,从 Authorization 头中提取 JWT。
  2. 服务器验证 JWT 的有效性(签名、过期时间等)。
  3. 若 JWT 有效,服务器根据令牌中的用户信息和权限,决定是否允许访问请求的资源。
  4. 若 JWT 无效或权限不足,服务器返回相应的错误响应(如 401 未授权或 403 禁止访问)。
  5. 用户可以通过刷新令牌(Refresh Token)机制获取新的访问令牌,延长会话时间。
  6. 用户登出时,客户端删除存储的 JWT,服务器可选择将该令牌加入黑名单以防止其继续使用。
  7. 定期轮换密钥以增强安全性,确保旧令牌失效。

JWT 结构

JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。示例如下:

1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}
1
2
3
4
5
6
7
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622,
"roles": ["user", "admin"]
}
1
2
3
4
5
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)