ZBLOG

golang 中间件认证token

在 Golang 中,我们可以使用中间件来验证 token。下面是一个示例:

package middleware

import (
    "net/http"
    "strings"
    "github.com/dgrijalva/jwt-go"
)

func AuthMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        authHeader := strings.Split(r.Header.Get("Authorization"), " ")
        if len(authHeader) != 2 || authHeader[0] != "Bearer" {
            w.WriteHeader(http.StatusUnauthorized)
            w.Write([]byte("Invalid authorization header"))
            return
        }

        tokenString := authHeader[1]
        claims := &jwt.StandardClaims{}

        token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
            // Replace this with your own secret key or get it from a secure location.
            return []byte("secret-key"), nil 
        })

        if err != nil {
            w.WriteHeader(http.StatusUnauthorized)
            w.Write([]byte(err.Error()))
            return
        }

        if !token.Valid {
            w.WriteHeader(http.StatusUnauthorized)
            w.Write([]byte("Invalid token"))
            return
        }

        next.ServeHTTP(w, r)
    })
}

这个中间件会验证 Authorization 头部是否有一个合法的 Bearer token。如果没有或无效,将返回 401 Unauthorized 错误。注意,此处使用了 JWT 库进行解析和验证 token,你需要将 []byte("secret-key") 替换为你自己的密钥或从安全位置获取它。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?