我有一个关于在 Go 中使用方法 HS256 进行 JWT 签名的问题。我正在使用这个导入“github.com/dgrijalva/jwt-go”
它不需要密钥长度 >= 256 位(32 字节)?
假设我有一个用 Golang 编写的服务器应用程序,它使用 16 位的密钥长度为 JWT 签名。当我尝试使用相同的密钥在客户端应用程序(用 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
}