我有来自身份提供商的公钥
-----BEGIN PUBLIC KEY-----
THIS
-----END PUBLIC KEY-----和来自我的客户端的JWT令牌。
如何根据密钥检查令牌?我在使用jwt-go时遇到了困难,因为解析函数接受令牌字符串和一个getKey函数。
不确定到底该如何进行
发布于 2018-08-14 16:14:17
令牌由RSA算法签名,该算法使用私钥进行签名,并使用公钥进行验证。将您的公钥存储到文件系统,并使用jwt.SigningMethodRS256.Verify()进行验证。如下代码段所示:
package main
import (
"fmt"
"strings"
"log"
"io/ioutil"
jwt "github.com/dgrijalva/jwt-go"
)
func main() {
publicKeyPath := "~/public_key.key"
token := "your_jwt_token_here"
if isValid, err := verifyToken(token, publicKeyPath)
if err != nil {
log.Fatal(err)
}
if isValid {
fmt.Println("The token is valid")
} else {
fmt.Println("The token is invalid")
}
}
func verifyToken(token, publicKeyPath string) (bool, error) {
keyData, err := ioutil.ReadFile(publicKeyPath)
if err != nil {
return false, err
}
key, err := jwt.ParseRSAPublicKeyFromPEM(keyData)
if err != nil {
return false, err
}
parts := strings.Split(token, ".")
err = jwt.SigningMethodRS256.Verify(strings.Join(parts[0:2], "."), parts[2], key)
if err != nil {
return false, nil
}
return true, nil
}发布于 2018-08-14 13:29:38
使用jwt-go,您可以做到这一点
token, err := p.Parse(IDToken, func(*jwt.Token) (interface{}, error) {
return []byte(signingKey), nil
})并且它将对照密钥来验证令牌。
引用documentation的话,
类型Keyfunc函数(*Token)(接口{},错误)
解析方法使用此回调函数来提供用于验证的密钥。该函数接收已解析但未经验证的令牌。这允许您使用令牌标头中的属性(如kid)来标识要使用的密钥。
https://stackoverflow.com/questions/51834234
复制相似问题