gpt4 book ai didi

go - 在 Go 中解析 JSON Web token 声明

转载 作者:IT王子 更新时间:2023-10-29 02:21:06 25 4
gpt4 key购买 nike

我正在尝试使用 JSON Web token 进行一些身份验证,并且我已设法生成具有正确声明的 token ,但我在解析后续请求的声明时遇到了问题。

我的 token 看起来像这样

{
"Raw": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"Method": {
"Name": "RS256",
"Hash": 5
},
"Header": {
"alg": "RS256",
"typ": "JWT"
},
"Claims": {
"foo": "bar"
},
"Signature": "",
"Valid": false
}

我的目标是从声明中解析 foo 值。我正在使用 this用于处理网络 token 的包。

我能够从 Authorization header 中成功提取 token ,但是当我尝试这样做时

token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return apiKeyPair.PublicKey, nil
})

if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
return claims, nil
} else {
return nil, err
}

我在这里没有收到错误,但是当我尝试从这样的声明中访问 foo

claims, err := GetWebTokenClaims(r)
if err != nil {
return
}

foo := claims["foo"]

我得到 nil。我已经尝试对这个结构进行一些小调整——比如使用 custom claims使用 ParseWithClaims() 方法——但对于我来说,我无法让这个简单的东西工作。

不确定从这里去哪里或其他可能相关的信息,感谢您的帮助!

最佳答案

定义一个描述声明并包含 jwt.StandardClaims 的类型:

type myClaims struct {
Foo string `json:"foo"`
jwt.StandardClaims
}

如果您有一个包含此数据的 JWT

{
"foo": "bar"
}

您可以像这样访问声明:

parsedToken, err := jwt.Parse(signed, keyfunc)
if err != nil {
fmt.Println("token is invalid: ", err)
} else {
claims := parsedToken.Claims.(jwt.MapClaims)
fmt.Println(claims["foo"])
}

关于go - 在 Go 中解析 JSON Web token 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49375894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com