ZBLOG

go-zero框架的 jwt-go

go-zero 框架中,使用 jwt-go 是为了实现基于 JSON Web Token (JWT) 的身份验证和授权。go-zero 是一个轻量级的 Go 微服务框架,它内置了对 JWT 的支持,以便简化开发过程。

使用 jwt-go 在 go-zero 中实现 JWT

  1. 安装依赖: 你需要确保你的项目中包含 jwt-go 库,可以通过以下命令安装:
  1. go get github.com/dgrijalva/jwt-go
  1. 生成 JWT: 你可以创建一个函数来生成 JWT。在生成过程中,你需要指定密钥和声明(如用户ID、过期时间等)。
  1. package main
  2. import (
  3. "github.com/dgrijalva/jwt-go"
  4. "time"
  5. )
  6. func GenerateJWT(secret string, userId int64) (string, error) {
  7. claims := jwt.MapClaims{
  8. "user_id": userId,
  9. "exp": time.Now().Add(time.Hour * 72).Unix(),
  10. }
  11. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  12. return token.SignedString([]byte(secret))
  13. }
  1. 解析 JWT: 在处理请求时,你可以解析和验证传入的 JWT。
  1. func ParseJWT(tokenStr string, secret string) (*jwt.Token, error) {
  2. return jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
  3. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  4. return nil, ErrInvalidToken
  5. }
  6. return []byte(secret), nil
  7. })
  8. }
  1. 集成到 go-zero: 在你的 API 路由中,可以通过中间件来保护某些路由,确保只有持有有效 JWT 的请求才能访问。

    1. import (
    2. "github.com/zeromicro/go-zero/rest/httpx"
    3. // ... other imports
    4. )
    5. func AuthMiddleware(next http.HandlerFunc) http.HandlerFunc {
    6. return func(w http.ResponseWriter, r *http.Request) {
    7. tokenStr := r.Header.Get("Authorization")
    8. if tokenStr == "" {
    9. http.Error(w, "Authorization header is required", http.StatusUnauthorized)
    10. return
    11. }
    12. _, err := ParseJWT(tokenStr, "your_secret_key")
    13. if err != nil {
    14. http.Error(w, "Invalid token", http.StatusUnauthorized)
    15. return
    16. }
    17. next(w, r)
    18. }
    19. }

总结

使用 jwt-gogo-zero 集成是相对直接的,通过这些步骤,你可以轻松地在 Go 应用程序中实施基于 JWT 的身份验证。根据具体需求,可以扩展 Claims 或添加更多功能,比如刷新令牌等。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22338

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?