返回

Go-zero实战:User Userinfo接口的JWT鉴权指南

后端

如何使用 Go-zero 为 User 用户信息接口添加 JWT 身份验证

引言

随着分布式系统的兴起,API 安全至关重要。JSON Web Token(JWT)已成为一种流行的身份验证机制,用于保护 API 免受未经授权的访问。本文将深入探讨如何使用 Go-zero 为 User Userinfo 接口添加 JWT 身份验证,让你的 API 更加安全。

1. JWT 简介

JWT 是一种基于 JSON 的开放标准,用于封装声明信息(Claims)并将其编码成一个紧凑的字符串。它由三部分组成:头部(Header)、负载(Payload)和签名(Signature)。头部和负载使用 Base64URL 编码,而签名用于验证 JWT 的完整性和真实性。

2. JWT 工作原理

当用户登录时,服务器生成一个 JWT 并将其返回给用户。在后续请求中,用户在 Authorization 头中包含 JWT,服务器对其进行验证。如果 JWT 有效,则允许用户访问受保护的资源,否则将拒绝访问。

3. 在 Go-zero 中使用 JWT

Go-zero 是一个基于 Go 的微服务框架,提供开箱即用的 JWT 支持。要为 User Userinfo 接口添加 JWT 身份验证,请按照以下步骤操作:

3.1 配置 JWT

api/etc 目录中创建 user-api.yaml 文件,并添加以下配置:

- name: auth
  use: jwt
  config:
    issuer: "your-issuer"
    secret: "your-secret"
  • issuer:签发 JWT 的实体。
  • secret:用于签名 JWT 的密钥。

3.2 添加 JWT 验证器

api/service/user/userinfo.go 文件中,添加以下代码:

import (
	"github.com/gin-gonic/gin"

	"api/internal/service/user"
	"api/pkg/jwt"
)

func Userinfo(c *gin.Context) {
	claims := jwt.GetClaimsFromGinContext(c)
	u, err := user.GetUserInfo(c.Request.Context(), claims.Uid)
	if err != nil {
		c.JSON(http.StatusInternalServerError, err.Error())
		return
	}

	c.JSON(http.StatusOK, u)
}
  • GetClaimsFromGinContext 从 Gin 上下文中提取 JWT 声明。
  • 根据 JWT 声明获取用户信息。

3.3 重新启动 API

重新启动 API 服务以应用更改。

4. 常见问题

4.1 如何生成 JWT?

可以使用 Go-zero 中的 jwt 包生成 JWT。

4.2 如何验证 JWT?

可以使用 jwt 包验证 JWT。

4.3 如何获取 JWT 声明?

可以使用 jwt 包获取 JWT 声明。

4.4 JWT 有效期有多长?

JWT 的有效期由 issuer 配置决定。

5. 总结

在本文中,我们展示了如何使用 Go-zero 为 User Userinfo 接口添加 JWT 身份验证。通过实施 JWT,你可以轻松保护你的 API 免受未经授权的访问,确保数据安全性和应用程序完整性。