Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mendapatkan tarikh luput daripada token jwt in go?

Bagaimana untuk mendapatkan tarikh luput daripada token jwt in go?

PHPz
PHPzke hadapan
2024-02-14 12:20:09899semak imbas

如何从 go 中的 jwt 令牌获取过期日期?

Dalam bahasa Go, token JWT ialah mekanisme pengesahan biasa. Untuk mendapatkan tarikh tamat tempoh daripada token JWT, kami boleh menggunakan pustaka pihak ketiga "github.com/dgrijalva/jwt-go" untuk menghuraikan muatan token. Mula-mula, kita perlu menghuraikan rentetan token ke dalam objek jwt.Token, dan kemudian kita boleh mendapatkan tarikh tamat tempoh dengan mengakses medan Token.Claims["exp"]. Nilai medan ini ialah cap waktu Unix, yang boleh ditukar kepada jenis masa menggunakan fungsi masa.Unix. Dengan cara ini, kita boleh mendapatkan tarikh tamat tempoh token JWT dengan mudah.

Kandungan soalan

Saya mempunyai token jwt dan saya boleh melihat token yang dinyahkod di laman web https://jwt.io/. Ia tidak memerlukan saya untuk menetapkan sebarang rahsia atau tuntutan. Jadi saya sedang mencari cara untuk menyahkod token untuk mendapatkan tarikh luput tanpa memberikan sebarang rahsia.

Saya menggunakan perpustakaan ngopkg.in/square/go-jose.v2/jwt dan di bawah ialah kod saya:

token, err := jwt.ParseSigned(jwtToken)

Nilai pulangan token Terdapat medan pengepala yang merangkumi keyid, algoritma tetapi ia tidak memberi saya tarikh luput.

Saya mencari topik ini dan orang berkata untuk menggunakan github.com/auth0/go-jwt-middleware/v2/validator 库,但它需要设置密钥/秘密。解析令牌的过期日期是否需要秘密。 网站https://jwt.io/Bagaimana untuk mengetahui tarikh luput?

Penyelesaian

Menggunakan contoh token jwt dari jwt.io, Kod ini menghuraikan dan mendapatkan semula tuntutan tanpa tandatangan yang disahkan:

func main() {
    raw := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

    t, err := jwt.ParseSigned(raw)
    if err != nil {
        panic(err)
    }

    var claims map[string]any
    if err := t.UnsafeClaimsWithoutVerification(&claims); err != nil {
        panic(err)
    }

    fmt.Println(claims)
}

Dalam contoh ini, masa tamat tempoh sepatutnya muncul sebagai claims 映射中的字段之一。要检索它,请使用 exp, ok := claims["expire"] (bergantung pada nama sebenar).

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan tarikh luput daripada token jwt in go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam