亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 jwt-go 中解析 JWT Auth 令牌時,密鑰的類型無效

在 jwt-go 中解析 JWT Auth 令牌時,密鑰的類型無效

Go
喵喵時光機 2023-07-17 09:50:52
我正在 GoLang API 中設置安全中間件,似乎所有設置都正確,但我收到錯誤“密鑰類型無效”。我已確認我的簽名算法是 RS256 并且中間件選項已配置 @SigningMethod: jwt.SigningMethodRS256我有一個有效的令牌……中間件中的其他所有內容都會通過。中間件中此錯誤的入口點是 jwt.ParseRSAPrivateKeyFromPEM 方法。我已將錯誤隔離在包 github.com/dgrijalva/jwt-go/rsa.go 中,Verify() on line :62 是拋出的 ErrInvalidKeyType。到目前為止,所有參數似乎都是可靠且適當的(例如 m|signingString|signature|key),但是這個 key.(*rsa.PublicKey) 失敗了......在我的調試器(GoLand)中,我檢查 *rsa 并得到響應“找不到 rsa 的符號值”...if rsaKey, ok = key.(*rsa.PublicKey); !ok {     return ErrInvalidKeyType }請注意……如果還不是太明顯的話……我對 GoLang 很菜鳥- - - 更新 - - -因此,在最細粒度的級別上,恐慌從 go/1.12.8/libexec/src/crypto/rsa/rsa.go:49 開始func (pub *PublicKey) Size() int {     log.Printf("SIZE ::: %v :: %v",pub.N.BitLen(), pub.N)         return (pub.N.BitLen() + 7) / 8         }pub 被視為零指針取消引用。我追溯到 mux -->加密/rsa.VerifyPKCS1v15(...) /usr/local/Cellar/go/1.12.8/libexec/src/crypto/rsa/pkcs1v15.go:275github.com/dgrijalva/jwt-go.(*SigningMethodRSA).Verify(...) /Users/me/Sandbox/src/github.com/dgrijalva/jwt-go/rsa.go:73github.com/dgrijalva/jwt-go.(*Parser).ParseWithClaims(...) /Users/me/Sandbox/src/github.com/dgrijalva/jwt-go/parser.go:77github.com/dgrijalva/jwt-go.(*Parser).Parse(...) /Users/btschirhart/Sandbox/src/github.com/dgrijalva/jwt-go/parser.go:20github.com/dgrijalva/jwt-go.Parse(...) /Users/me/Sandbox/src/github.com/dgrijalva/jwt-go/token.go:89github.com/auth0/go-jwt-middleware.(*JWTMiddleware).CheckJWT(...) /Users/me/Sandbox/src/github.com/auth0/go-jwt-middleware/jwtmiddleware.go:203github.com/auth0/go-jwt-middleware.(*JWTMiddleware).Handler.func1(...) /Users/me/Sandbox/src/github.com/auth0/go-jwt-middleware/jwtmiddleware.go:110net/http.HandlerFunc.ServeHTTP(...) /usr/local/Cellar/go/1.12.8/libexec/src/net/http/server.go:1995github.com/gorilla/mux.(*Router).ServeHTTP(...) /Users/me/Sandbox/src/github.com/gorilla/mux/mux.go:210 +0xe3
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

找到了答案。這不是一個真正的答案,但它確實解決了問題。


我使用“----BEGIN”和“END----”而不是“-----BEGIN”和“END-----”在中間件中構建證書。


在 go/1.12.8/libexec/src/encoding/pem/pem.go:82 中,對 '-----BEGIN' 進行檢查,如果失敗,則僅返回 nil。


if bytes.HasPrefix(data, pemStart[1:]) {

    rest = rest[len(pemStart)-1 : len(data)]

} else if i := bytes.Index(data, pemStart); i >= 0 {

    rest = rest[i+len(pemStart) : len(data)]

} else {

    return nil, data

}


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號