登录
首页 >  Golang >  Go问答

JWT-GO中解析JWT认证令牌时遇到无效密钥类型

来源:stackoverflow

时间:2024-02-25 10:21:26 392浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《JWT-GO中解析JWT认证令牌时遇到无效密钥类型》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我正在 golang api 中设置安全中间件,似乎所有设置都正确,但我收到错误“密钥类型无效”。

我已经确认我的签名算法是rs256,并且中间件选项配置为@signingmethod:jwt.signingmethodrs256

我有一个有效的令牌……中间件中的其他所有内容都通过了。

中间件中此错误的入口点是 jwt.parsersaprivatekeyfrompem 方法。

我已将错误隔离在 github.com/dgrijalva/jwt-go/rsa.go 包内,第 62 行上的 verify() 是抛出的 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 被视为 nil 指针取消引用。我追溯到 mux -->

加密/rsa.verifypkcs1v15(...) /usr/local/cellar/go/1.12.8/libexec/src/crypto/rsa/pkcs1v15.go:275 github.com/dgrijalva/jwt-go.(*signingmethodrsa).验证(...) /users/me/sandbox/src/github.com/dgrijalva/jwt-go/rsa.go:73 github.com/dgrijalva/jwt-go.(*parser).parsewithclaims(...) /users/me/sandbox/src/github.com/dgrijalva/jwt-go/parser.go:77 github.com/dgrijalva/jwt-go.(*parser).parse(...) /users/btschirhart/sandbox/src/github.com/dgrijalva/jwt-go/parser.go:20 github.com/dgrijalva/jwt-go.parse(...) /users/me/sandbox/src/github.com/dgrijalva/jwt-go/token.go:89 github.com/auth0/go-jwt-middleware.(*jwtmiddleware).checkjwt(...) /users/me/sandbox/src/github.com/auth0/go-jwt-middleware/jwtmiddleware.go:203 github.com/auth0/go-jwt-middleware.(*jwtmiddleware).handler.func1(...) /users/me/sandbox/src/github.com/auth0/go-jwt-middleware/jwtmiddleware.go:110 网/http.handlerfunc.servehttp(...) /usr/local/cellar/go/1.12.8/libexec/src/net/http/server.go:1995 github.com/gorilla/mux.(*router).servehttp(...) /users/me/sandbox/src/github.com/gorilla/mux/mux.go:210 +0xe3


解决方案


找到答案了。这不是一个真正的答案,但它确实解决了问题。

我使用“----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
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《JWT-GO中解析JWT认证令牌时遇到无效密钥类型》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>