【发布时间】:2022-02-19 23:19:24
【问题描述】:
我使用 OAuth2 设置了 Azure AD,并让它为我的 Web 应用程序发出 JWT。在后续请求中,我想验证发出的 JWT。我正在使用
github.com/dgrijalva/jwt-go
这样做,但它总是失败。
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
return []byte("bW8ZcMjBCnJZS-ibX5UQDNStvx4"), nil
})
if err != nil {
return nil, err
}
我从 MS 在此处列出的公钥
https://login.microsoftonline.com/common/discovery/v2.0/keys
中随机选择
kid
声明,所以我迷路了,因为这不起作用。
以前有没有人这样做过或者有什么指点?
-
您的 keyfunc 正在返回
kid
(密钥 ID),而您需要将密钥(在 JWK 文件中的x5c
节点中)作为*rsa.PublicKey
返回。 This example 可能会有所帮助。我建议使用 new repo 或 these libraries (包括解析您链接的 JWK 文件的代码)。 -
谢谢,我似乎到了某个地方,但是当它创建 PublicKey 时,库现在出现“crypto/rsa:验证错误”错误
-
抱歉 - 您需要使用您现在使用的代码更新您的问题,然后才能提供进一步的帮助。