1 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
JWT 支持許多簽名算法,這對(duì)這個(gè)特定的 API 來(lái)說(shuō)是一個(gè)挑戰(zhàn):根據(jù)簽名算法,它希望看到與該算法匹配的密鑰。
如果您查看此特定庫(kù)的 API 文檔:
https://godoc.org/github.com/dgrijalva/jwt-go
你會(huì)看到SigningMethodXXX
類型。這些是您選擇的簽名方法選擇的簽名者。對(duì)于 ES256,它使用SigningMethodECDSA
:
https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA
如果您查看Sign
方法文檔,您會(huì)看到它說(shuō):
對(duì)于此簽名方法,密鑰必須是 ecdsa.PrivateKey 結(jié)構(gòu)
您可以使用以下方法從 PEM 文件中解析:
https://godoc.org/github.com/dgrijalva/jwt-go#ParseECPrivateKeyFromPEM
例如:
pk, err:= jwt.ParseECPrivateKeyFromPEM(pemData) tokenStr, err := token.SignedString(pk)
這應(yīng)該會(huì)給你一個(gè)帶有 ES256 的簽名令牌。
所以,你必須首先弄清楚你有什么樣的鑰匙。如果您在字符串中有 ECDSA 密鑰的 PEM 編碼,則使用此方法對(duì)其進(jìn)行解析并將生成的私鑰傳遞給簽名者。
但是,如果您只有一個(gè)字符串密鑰(如密碼)并且您將與 JWT 的用戶共享此密鑰,那么您可以使用 HMAC 密鑰。HMAC 密鑰只是您與用戶共享的字節(jié)數(shù)組密鑰,因此他們可以驗(yàn)證 JWT 是否由您簽名。只需將 SigningMethod 更改為以下常量之一:
https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC
然后,您的代碼將正常工作,但您必須將簽名方法更改為類似jwt.New(jwt.SigningMethodHS256)
- 1 回答
- 0 關(guān)注
- 183 瀏覽
添加回答
舉報(bào)