【问题标题】:How to get the claims from the token?如何从令牌中获取索赔?
【发布时间】:2020-04-02 14:07:20
【问题描述】:

我有一个 GenerateToken 函数,它根据用户名、ID 和标准声明的组合生成令牌。

func GenerateToken( creds *users.User) (tokenString string, err error){
    expirationTime := time.Now().Add(100 * time.Hour)
    claims := &Claims{
        Username: creds.Username,
        Id      : creds.Id,
        StandardClaims: jwt.StandardClaims{
            ExpiresAt: expirationTime.Unix(),
            Issuer:    "gogin",
        },
    }
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    tokenString, err = token.SignedString([]byte(os.Getenv("SECRET_CODE")))
    if err != nil{
        return "", err
    }
    return tokenString, nil
}

这是声明的结构

type Claims struct {
    Username string `json:"username"`
    Id uint32
    jwt.StandardClaims
}

上面将为我生成一个令牌。 我需要解码这个令牌并提取声明。有什么方法可以得到相同的吗?

【问题讨论】:

标签: go jwt go-gin


【解决方案1】:

试试这个:

func parseToken(tokenString string) (claims jwt.MapClaims, err error) {
    claims = jwt.MapClaims{}
    parsed, err := jwt.ParseWithClaims(tokenString, claims, verifyFunc)
    if err != nil {
        return nil, err
    }
    if !parsed.Valid {
        return nil, fmt.Errorf("invalid token")
    }
    return claims, nil
}

func verifyFunc(token *jwt.Token) (interface{}, error) {
    return []byte(os.Getenv("SECRET_CODE")), nil
}

第一个方法接受一个标记字符串并解析它。 第二种方法是 key func,您可以在其中使用令牌标头中的属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 2021-10-10
    • 1970-01-01
    • 2019-09-09
    • 2021-03-20
    • 2019-10-05
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多