Go语言 如何从JWT令牌中提取声明

c9x0cxw0  于 2023-01-22  发布在  Go
关注(0)|答案(2)|浏览(162)

我使用的是dgrijalva/jwt-go/软件包。
我想从令牌中提取有效负载,但找不到方法。
示例(摘自:https://jwt.io/):
对于编码:
例如,在美国,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属是镍,一种金属,一种金属是镍,一种金属,一种金属是镍,一种金属,一种金属是镍,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属,一种金属
我想提取有效载荷:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

我将感谢一个例子(使用golang)。

r6vfmomb

r6vfmomb1#

样本代码:

func extractClaims(tokenStr string) (jwt.MapClaims, bool) {
        hmacSecretString := // Value
        hmacSecret := []byte(hmacSecretString)
        token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
             // check token signing method etc
             return hmacSecret, nil
        })

        if err != nil {
            return nil, false
        }

        if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
            return claims, true
        } else {
            log.Printf("Invalid JWT Token")
            return nil, false
        }
    }
ubof19bj

ubof19bj2#

如果要提取没有秘密的声明,可以使用ParseUnverified

func extractUnverifiedClaims(tokenString string) (string, error) {
    var name string
    token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{})
    if err != nil {
        return "", err
    }

    if claims, ok := token.Claims.(jwt.MapClaims); ok {
        name = fmt.Sprint(claims["name"])
    }

    if name == "" {
        return "", fmt.Errorf("invalid token payload")
    }
    return name, nil
}

完整代码:https://go.dev/play/p/a7CdBNL8LzW

相关问题