【问题标题】:JWT Signing Method HS256 GolangJWT 签名方法 HS256 Golang
【发布时间】:2020-08-09 04:48:54
【问题描述】:

我有一个关于在 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
}

【问题讨论】:

    标签: go jwt jwt-go


    【解决方案1】:

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

    crypto/hmaccrypto/hash 包没有定义任何情况下要返回的任何错误。因此,正如您所描述的,密钥长度检查应该由调用者完成。因此,go 的作用与语言无关。这是程序如何编写的问题。

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

    【讨论】:

    • 您好@Tim,感谢您的回答。这是创建访问令牌的函数: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 }
    • 您应该编辑问题并添加此代码。例如,jwt 来自哪里?它应该是某种进口。请编辑问题以获得Minimal, Reproducible Example。也许您可以通过浏览代码找到您正在寻找的答案。
    • 我正在使用这个导入“github.com/dgrijalva/jwt-go”。
    猜你喜欢
    • 2018-02-03
    • 2021-05-29
    • 2016-06-27
    • 2020-11-25
    • 2015-09-20
    • 2023-03-20
    • 2022-01-23
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多