首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWT签名方法HS256 Golang

JWT签名方法HS256 Golang
EN

Stack Overflow用户
提问于 2020-04-25 23:42:13
回答 1查看 1.2K关注 0票数 0

我有一个关于在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而不给出错误呢?

下面是创建访问令牌的函数:

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-26 00:07:47

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61428260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档