Maison  >  Article  >  développement back-end  >  Comment obtenir la date d'expiration du jeton jwt en go ?

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

PHPz
PHPzavant
2024-02-14 12:20:09901parcourir

如何从 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)

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)
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer