【问题标题】:To create JWT where to provide public key in this implementation在此实现中创建 JWT 在哪里提供公钥
【发布时间】:2021-01-05 22:49:34
【问题描述】:

我看到了私钥,但是在哪里提供公钥以便我可以发布。完美运行,但我错过了公钥,在创建 JWT 令牌时它在哪里给出?我假设下面的示例密钥 (dnfksdmfksd) 是私钥。我正在使用 github.com/dgrijalva/jwt-go 谢谢!

func CreateToken(userid uint64) (string, error) {
    var err error
     //Creating Access Token
     os.Setenv("ACCESS_SECRET", "jdnfksdmfksd") //this should be in an env file
     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(os.Getenv("ACCESS_SECRET")))
     if err != nil {
       return "", err
     }
     return token, nil
   }

【问题讨论】:

  • 您使用了错误的公钥和私钥签名方法。对于 RSA,您应该使用 RS256、RS384 或 RS512,而对于 ESDCA,您应该使用 ES256、ES384 或 ES512 作为签名方法。私钥将用于签署令牌和公钥以验证它。
  • 谢谢,有没有在 golang 中实现这种实现的链接?
  • 希望这个例子对你有所帮助 - github.com/dgrijalva/jwt-go/blob/master/http_example_test.go

标签: go authentication jwt token


【解决方案1】:

HS256 是一种对称算法。它使用共享密钥。没有公钥/私钥。 JWT 的接收者必须使用相同的密钥来验证签名。

【讨论】:

  • 抱歉,试图理解。如果每个人都可以访问共享密钥,那么有人会阻止生成 jwt 令牌并将它们作为原始令牌传递。黑客或权威 - 两者都可以产生完全相同的 jwt 令牌,对吧? [我的学习机会-哈哈]
  • 您不会向公众公开 HS256 密钥。您要么只与受信任的方共享它,要么使用它来验证 JWT 是否由您签名。如果您需要使用公钥进行验证,则需要 RS 类的签名方法。
  • 有道理。谢谢你。所以我作为创建者和权威只能验证我自己的 jwt 令牌。这对我有用,因为我是唯一向用户提供资源的人。谢谢!
猜你喜欢
  • 2021-08-14
  • 2019-02-21
  • 2017-03-02
  • 2016-10-29
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多