我有一个关于在Go中使用HS256方法的JWT签名的问题。我使用这个导入"github.com/dgrijalva/jwt-go“
它不需要密钥长度>= 256位(32字节)?
假设我有一个用Golang编写的服务器应用程序,它给出的JWT签名密钥长度为16位。当我尝试用相同的密钥在客户端应用程序(用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.
好吧,这个错误是有意义的,因为密钥长度小于256位,但是服务器应用程序如何能够生成长度小于256位的密钥签名的JWT而不给出错误呢?
下面是创建访问令牌的函数:
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
}发布于 2020-04-26 00:07:47
Go中没有“标准”的jwt库。因此,要彻底回答这个问题,我们需要查看服务器代码,或者服务器正在使用哪个库。
crypto/hmac和crypto/hash包没有定义任何在任何情况下都要返回的错误。因此,密钥长度检查,如您所述,应该由调用者完成。所以这不是go做某事的语言的问题。这是一个程序是如何编写的问题。
如果您想了解更多,可以在https://jwt.io/#libraries-io上浏览不同的实现。(手动按Go过滤)。
https://stackoverflow.com/questions/61428260
复制相似问题