2 回答
TA贡献1851条经验 获得超5个赞
您的部分问题是,当您在声明部分中确实需要它时,您正试图在 JWT 标头中定义您的自定义有效负载。
jwt 包提供了一种MapClaims类型,允许您以松散类型的方式定义您的声明。如果您想对您的声明进行更强的输入,您可以使用结构嵌入来定义您自己的声明类型,方法是执行以下操作:
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"fmt"
"time"
"github.com/dgrijalva/jwt-go"
)
type payload struct {
Data map[string]string `json:"data,omitempty"`
Type string `json:"type,omitempty"`
}
type customClaims struct {
jwt.StandardClaims
Payload payload `json:"payload,omitempty"`
Env string `json:"env,omitempty"`
}
func main() {
key, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
timestamp := time.Now().Unix()
claims := customClaims{
StandardClaims: jwt.StandardClaims{
Audience: "notify",
ExpiresAt: timestamp + 60,
Issuer: "id.example.com",
IssuedAt: timestamp,
},
Env: "integration",
Payload: payload{
Type: "CUSTOM",
Data: map[string]string{
"name": "bob",
"id": "123456",
},
},
}
token := jwt.NewWithClaims(jwt.SigningMethodES256, claims)
tokenString, _ := token.SignedString(key)
fmt.Println(tokenString)
}
TA贡献1893条经验 获得超10个赞
使用 MapClaims:
claims:=map[string]interface{} {
"payload": map[string]interface{} {
...
},
...
}
token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.MapClaims(claims))
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报