美文网首页
casdoor的jwt验签

casdoor的jwt验签

作者: 博楠同学 | 来源:发表于2023-11-22 16:13 被阅读0次

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)

相关文章

网友评论

      本文标题:casdoor的jwt验签

      本文链接:https://www.haomeiwen.com/subject/nfqwwdtx.html