1、go版本
secKey 是公钥,从证书中获取到,证书在casdoor中会自动生成一个,也可以使用自签的
openssl x509 -pubkey -noout -in ca.crt > pub.key
package main
import (
"fmt"
"github.com/golang-jwt/jwt/v5"
)
var accessToekn = "eyJhbGciOiJSUzI1NiIsImtpZCI6InRlY28iLCJ0eXAiOiJKV1QifQ.eyJvd25lciI6IndvcmtiZW5jaCIsIm5hbWUiOiJBZG1pbjAxIiwiY3JlYXRlZFRpbWUiOiIyMDIzLTA4LTIxVDEzOjI1OjE3KzA4OjAwIiwidXBkYXRlZFRpbWUiOiIiLCJpZCI6IjVlZDZhZWUwLWY1MTgtNDI2Zi05NWVmLTQwYmI2ZjhhNmYzOCIsInR5cGUiOiJub3JtYWwtdXNlciIsInBhc3N3b3JkIjoiIiwicGFzc3dvcmRTYWx0IjoiIiwiZGlzcGxheU5hbWUiOiJBZG1pbjAxIiwiZmlyc3ROYW1lIjoiIiwibGFzdE5hbWUiOiIiLCJhdmF0YXIiOiJodHRwczovL2Nkbi5jYXNiaW4ub3JnL2ltZy9jYXNiaW4uc3ZnIiwicGVybWFuZW50QXZhdGFyIjoiIiwiZW1haWwiOiJ5bms5MjdAZXhhbXBsZS5jb20iLCJlbWFpbFZlcmlmaWVkIjpmYWxzZSwicGhvbmUiOiIiLCJsb2NhdGlvbiI6IiIsImFkZHJlc3MiOltdLCJhZmZpbGlhdGlvbiI6IiIsInRpdGxlIjoiIiwiaWRDYXJkVHlwZSI6IiIsImlkQ2FyZCI6IiIsImhvbWVwYWdlIjoiIiwiYmlvIjoiIiwicmVnaW9uIjoiIiwibGFuZ3VhZ2UiOiIiLCJnZW5kZXIiOiIiLCJiaXJ0aGRheSI6IiIsImVkdWNhdGlvbiI6IiIsInNjb3JlIjowLCJrYXJtYSI6MCwicmFua2luZyI6MiwiaXNEZWZhdWx0QXZhdGFyIjpmYWxzZSwiaXNPbmxpbmUiOmZhbHNlLCJpc0FkbWluIjpmYWxzZSwiaXNHbG9iYWxBZG1pbiI6ZmFsc2UsImlzRm9yYmlkZGVuIjpmYWxzZSwiaXNEZWxldGVkIjpmYWxzZSwic2lnbnVwQXBwbGljYXRpb24iOiJ3b3JrYmVuY2giLCJoYXNoIjoiIiwicHJlSGFzaCI6IiIsImNyZWF0ZWRJcCI6IiIsImxhc3RTaWduaW5UaW1lIjoiMjAyMy0xMS0yM1QxNDoyOTowNyswODowMCIsImxhc3RTaWduaW5JcCI6IiIsImxkYXAiOiIiLCJwcm9wZXJ0aWVzIjp7fSwicm9sZXMiOlt7Im93bmVyIjoid29ya2JlbmNoIiwibmFtZSI6InJfY19hIiwiY3JlYXRlZFRpbWUiOiIyMDIzLTA4LTIyVDEwOjQ1OjI0KzA4OjAwIiwiZGlzcGxheU5hbWUiOiJDb25zb2xlQWRtaW4iLCJ1c2VycyI6bnVsbCwicm9sZXMiOltdLCJkb21haW5zIjpbXSwiaXNFbmFibGVkIjp0cnVlfV0sInBlcm1pc3Npb25zIjpbXSwibGFzdFNpZ25pbldyb25nVGltZSI6IiIsInNpZ25pbldyb25nVGltZXMiOjAsInRva2VuVHlwZSI6ImFjY2Vzcy10b2tlbiIsInNjb3BlIjoicmVhZCIsImlzcyI6Imh0dHBzOi8vMTAuOC4yMC4xMDA6MzEwMTAiLCJzdWIiOiI1ZWQ2YWVlMC1mNTE4LTQyNmYtOTVlZi00MGJiNmY4YTZmMzgiLCJhdWQiOlsiZDFmMzZiYTE4ZjM1MWRkMjAxN2EiXSwiZXhwIjoxNzAwODA3NjgyLCJuYmYiOjE3MDA3MjEyODIsImlhdCI6MTcwMDcyMTI4MiwianRpIjoiYWRtaW4vOGQwNjk2MzQtNmUzMS00NGQwLTg3OGMtOTc3MWQ4ZmEyNmFmIn0.XsWDE84YBVDbe93YMyiePXed_Ybhe46DRmqRR54YSaEih9TbFIEx1NFan3fZsXYHQkI8k-G6wN4CWRgdvh3ClVgFjdjtGuUfu9IXXzhb-lMf0o6hmpgD1_Rx2Yruh5Y8Tkpci_eIJQhCaQgef4ylolpP5EjVFDF7w4Vyny0p-6t1VjtjaI72w6mW7LVsPHTn5A_kPN72tCfoTdFv6C7u5nO24WIwCIcEiCuZ1WHQIkmLE0oHXhzypsQw35lBvC9uPc84ZWQsKZa8QlKoANr5TYsvundiYjf1JNe7PVxC2dYjLzYqFo763T0n-EjpbuvOzHUF3MuNQl9XF-nuKvArJbPVu629dwxoBF9zjc9rgR8eUSvdhEFfe-FfCVYohsJPKW0kKTJn0bEOJ40zO08LhFC3TkjTq6ZGlGRibR5X5ZUYOd1k_Qjb3qWbJhRpaH2nNmV5OCePZaWomGjWn42-zLWK004mXQUNcAjOQ3wnooPVJSaQoDACZdQQ8X92DV8w9_72I8_5yM7vBT6UsFDjz-PLbUPTEVKvA41CNxsC-XtUcAVDA2fbl2olZkQlKJGZ3hYLFhrArpfAeswMSy8mXXNFHgSvb-PPXlxxoqeTyvq6QVRQfgDDtb2CXmx2StSs3rcadkCw_AjB6t0BazyimhSmH042PRqrB9gYIek4hOA"
var secKey = `-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApeEuXX7b0BOYJeA/Rj3o
b09JcBnkAXq0zk3kOYLw6G8ik6F4Wg7Ta/Gz/N8hNLc09rfK4M9/n6nnfjLOIR6t
DmlQ8aKNj5rfI9MEPdNyTbw6SROWNAhfc7VN/ElGYPiG5Ht2c3dB9sI3FYhFoxSI
RpUAb5bEhcyRggbrrDzAACII7J2cBa4FFX31cS3K9rtYD4sRzCAV5t0ZXVxQdEAa
+FImlud0rOLEYztwYbhPY2fOf/FZ9SXiXv48FQLT1+gTNhzAZ60NuO0pvc0Tgbuk
4JZZhctPv9LDRUj1gyQ9+KNQ/DlVUvRAXSGKkhvRCcJ5TwuHjq+Q44F416kYrIr5
txStZk1hkkex6Joum+U1mR0HZT2DHcheCiL+h4B5U5mqL7+IL9dQ0NIh9n2kibfH
rQkLsu2l8r0OmACIDyKl39HhQzGohg6k2Ah+Y/cKH80f2aohAKDjEFH11loqRnJ2
CDk8ZUKivAgfUPlE3kn5J+5CZJxKXl8Dyze0dkEAZGOe58JGHpmGxUJJQiTFUCaz
gHZiXy0d+NfV0azy39y0WabKrnFF9mFbzNVuSEpBxIQ9+UQ6edkah6eG79731Ffr
A0NYMXnHUZGPzEobh0LPGFIAtT55vAVra+xzDp6MBCPFS3B8/PVVqlfPILZ2Kg23
dEiHTGGxAm4k/pXjePgSwrUCAwEAAQ==
-----END PUBLIC KEY-----`
func main() {
var data jwt.RegisteredClaims
token, err := jwt.ParseWithClaims(accessToekn, &data, func(token *jwt.Token) (interface{}, error) {
pubKey, err := jwt.ParseRSAPublicKeyFromPEM([]byte(secKey))
if err != nil {
return nil, err
}
return pubKey, nil
})
fmt.Println(err, "=================err")
//fmt.Println(token, "=================token")
fmt.Printf("%+v ==========================\n", data)
fmt.Printf("%+v ==========================\n", token)
fmt.Println(token.Valid)
}
2、python 版本
import jwt
# JWT 字符串
jwt_string = "your_jwt_string_here"
# 公钥
public_key = """
-----BEGIN PUBLIC KEY-----
your_public_key_here
-----END PUBLIC KEY-----
"""
try:
# 使用公钥验证 JWT 签名
decoded = jwt.decode(jwt_string, public_key, algorithms=['RS256'])
# 签名验证成功,打印解码后的 JWT 负载信息
print(decoded)
except jwt.ExpiredSignatureError:
# 签名已过期
print("签名已过期")
except jwt.InvalidTokenError:
# 无效的令牌
print("无效的令牌")
except jwt.DecodeError:
# 解码错误
print("解码错误")
except Exception as e:
# 其他错误
print("验证签名时出现错误:", e)
网友评论