Maison > développement back-end > Golang > le corps du texte

Comment obtenir la date d'expiration du jeton jwt en go ?

PHPz
Libérer: 2024-02-14 12:20:09
avant
965 Les gens l'ont consulté

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

En langage Go, le token JWT est un mécanisme d'authentification courant. Pour obtenir la date d'expiration du jeton JWT, nous pouvons utiliser la bibliothèque tierce « github.com/dgrijalva/jwt-go » pour analyser la charge utile du jeton. Tout d'abord, nous devons analyser la chaîne de jeton dans un objet jwt.Token, puis nous pouvons obtenir la date d'expiration en accédant au champ Token.Claims["exp"]. La valeur de ce champ est un horodatage Unix, qui peut être converti en type d'heure à l'aide de la fonction time.Unix. De cette façon, nous pouvons facilement obtenir la date d'expiration du jeton JWT.

Contenu de la question

J'ai un jeton jwt et je peux voir le jeton décodé sur le site https://jwt.io/. Cela ne m'oblige pas à définir des secrets ou des réclamations. Je cherche donc un moyen de décoder le token pour obtenir la date d'expiration sans fournir de secret.

J'utilise la bibliothèque ngopkg.in/square/go-jose.v2/jwt et ci-dessous mon code :

token, err := jwt.ParseSigned(jwtToken)
Copier après la connexion

Valeur de retour token Il y a un champ d'en-tête qui inclut le keyid, l'algorithme mais il ne me donne pas la date d'expiration.

J'ai recherché ce sujet et les gens m'ont dit d'utiliser github.com/auth0/go-jwt-middleware/v2/validator 库,但它需要设置密钥/秘密。解析令牌的过期日期是否需要秘密。 网站https://jwt.io/Comment connaître la date d'expiration ?

Solution de contournement

En utilisant l'exemple de jeton jwt de jwt.io, Ce code analyse et récupère les réclamations sans signatures vérifiées :

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)
}
Copier après la connexion

Dans cet exemple, le délai d'expiration doit apparaître sous la forme claims 映射中的字段之一。要检索它,请使用 exp, ok := claims["expire"] (selon le nom exact).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal