gpt4 book ai didi

Golang 使用 rsa key 打包 jwt-go。如何放置公钥以及如何从 token 中获取它?

转载 作者:IT王子 更新时间:2023-10-29 01:42:47 24 4
gpt4 key购买 nike

我正在尝试使用 golang 中的 jwt-go 包生成带有 rsa key 的 token 。

Here有一个博客解释了如何做到这一点,但该代码将始终验证所有 token ,因为它使用存储在服务器中的公钥而不是从 token 中获取它。你如何将完整的公钥放入 token 中?我正在尝试这个:

var secretKey, _ = rsa.GenerateKey(rand.Reader, 1024)
token := jwt.New(jwt.SigningMethodRS256)
token.Claims["username"] = "victorsamuelmd"
token.Claims["N"] = secretKey.PublicKey.N
token.Claims["E"] = secretKey.PublicKey.E

tokenString, err := token.SignedString(secretKey)

nt, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
// here I need to recover the public key from the token
// but N is a big.Int and the token stores N as int64
})

对不起我的英语。谢谢。

最佳答案

我认为将公钥存储在声明中不是一个好主意,因为我们可以在技术上使用该 key 验证 JWT,但这意味着它不再是已签名的 JWT。如果任何人都可以使用自己的私钥生成 JWT 并将公钥存储在 JWT 中,我们无法确定谁是签名者。

无论如何,您可以将公钥转换为 PEM 格式(只是一个字符串),并将其存储在声明中。在客户端,您也可以简单地将其再次解析为公钥格式。示例代码如下:

privateKey, _ := rsa.GenerateKey(rand.Reader, 1024)
bytes, _ := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
pem := pem.EncodeToMemory(&pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: bytes,
})
claim["publickey"] = string(pem)

pem := []byte(claims["publickey"].(string))
return jwt.ParseRSAPublicKeyFromPEM(pem)

jwtdgrijalva's jwt-go .

关于Golang 使用 rsa key 打包 jwt-go。如何放置公钥以及如何从 token 中获取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158646/

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