我正在尝试使用JSON Web令牌进行一些身份验证,并且我已设法使用正确的声明生成令牌,但我无法解析声明后续请求。
我的令牌看起来像这样
{
"Raw": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"Method": {
"Name": "RS256",
"Hash": 5
},
"Header": {
"alg": "RS256",
"typ": "JWT"
},
"Claims": {
"foo": "bar"
},
"Signature": "",
"Valid": false
}
我的目标是解析声明中的foo
值。我正在使用this包来处理网络令牌。
我能够从Authorization
标题中成功提取令牌,但是当我尝试这个时
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
。我已尝试对此结构进行一些小调整 - 就像使用ParseWithClaims()
方法一样使用custom claims - 但对于我的生活,我无法让这个简单的事情发挥作用。
不确定从何处开始或其他相关信息可能相关,欢迎任何帮助!
答案 0 :(得分:0)
定义描述声明的类型,其中包含jwt.StandardClaims
:
type myClaims struct {
Foo string `json:"foo"`
jwt.StandardClaims
}
如果您使用此data
{
"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"])
}