gpt4 book ai didi

go - JWT 签名方法 HS256 Golang

转载 作者:行者123 更新时间:2023-12-01 22:23:34 25 4
gpt4 key购买 nike

我有一个关于在 Go 中使用方法 HS256 进行 JWT 签名的问题。我正在使用这个导入“github.com/dgrijalva/jwt-go”

它不需要 key 长度 >= 256 位(32 字节)?

假设我有一个用 Golang 编写的服务器应用程序,它使用 16 位的 key 长度为 JWT 签名。当我尝试使用相同的 key 在客户端应用程序(用 Java 编写)中验证这个 JWT 时,它给了我一个错误:
io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 16 bits which is not secure enough for any JWT HMAC-SHA algorithm.
好吧,这个错误是有道理的,因为 key 长度小于 256 位,但是服务器应用程序如何生成使用大小小于 256 位的 key 签名的 JWT 而不会出错?

这是创建访问 token 的函数:

import(
"time"

"github.com/dgrijalva/jwt-go"
)

func CreateToken(userid uint64) (string, error) {
var err error
//Creating Access Token
atClaims := jwt.MapClaims{}
atClaims["authorized"] = true
atClaims["user_id"] = userid
atClaims["exp"] = time.Now().Add(time.Minute * 15).Unix()
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
token, err := at.SignedString([]byte("NRF"))
if err != nil {
return "", err
}
return token, nil
}

最佳答案

Go 中没有“标准”jwt 库。所以要彻底回答这个问题,我们需要查看服务器代码,或者服务器正在使用哪个库。

crypto/hmac crypto/hash 包没有定义任何情况下要返回的任何错误。因此,正如您所描述的, key 长度检查应该由调用者完成。所以这不是语言的问题go做某事。这是程序如何编写的问题。

如果你想了解更多,可以浏览 https://jwt.io/#libraries-io 上的不同实现。 . (按 Go 手动过滤)。

关于go - JWT 签名方法 HS256 Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61428260/

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