我有我的身份提供者提供的公共(public) key

-----BEGIN PUBLIC KEY-----
THIS
-----END PUBLIC KEY-----

还有我客户的JWT token 。

如何针对 key 检查 token ?
我在使用jwt-go时遇到了困难,因为Parse函数需要 token 字符串和getKey函数。

不确定如何进行

最佳答案

该 token 由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
}

关于go - 我有一个公共(public) key 和一个JWT,如何检查它在Go中是否有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51834234/

10-13 08:07
查看更多