Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich das Ablaufdatum vom JWT-Token in Go?

Wie erhalte ich das Ablaufdatum vom JWT-Token in Go?

PHPz
PHPznach vorne
2024-02-14 12:20:09901Durchsuche

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

In der Go-Sprache ist das JWT-Token ein gängiger Authentifizierungsmechanismus. Um das Ablaufdatum des JWT-Tokens abzurufen, können wir die Drittanbieterbibliothek „github.com/dgrijalva/jwt-go“ verwenden, um die Nutzlast des Tokens zu analysieren. Zuerst müssen wir die Token-Zeichenfolge in ein jwt.Token-Objekt analysieren und dann können wir das Ablaufdatum abrufen, indem wir auf das Feld Token.Claims["exp"] zugreifen. Der Wert dieses Feldes ist ein Unix-Zeitstempel, der mit der Funktion time.Unix in einen Zeittyp konvertiert werden kann. Auf diese Weise können wir leicht das Ablaufdatum des JWT-Tokens ermitteln.

Frageninhalt

Ich habe einen JWT-Token und kann den entschlüsselten Token auf der https://jwt.io/-Website sehen. Es ist nicht erforderlich, dass ich irgendwelche Geheimnisse oder Ansprüche aufstelle. Deshalb suche ich nach einer Möglichkeit, den Token zu entschlüsseln, um das Ablaufdatum zu ermitteln, ohne ein Geheimnis preiszugeben.

Ich verwende die Bibliothek ngopkg.in/square/go-jose.v2/jwt und unten ist mein Code:

token, err := jwt.ParseSigned(jwtToken)

Rückgabewert token Es gibt ein Header-Feld, das die Schlüssel-ID und den Algorithmus enthält, mir aber nicht das Ablaufdatum anzeigt.

Ich habe dieses Thema durchsucht und die Leute sagten, ich solle github.com/auth0/go-jwt-middleware/v2/validator 库,但它需要设置密钥/秘密。解析令牌的过期日期是否需要秘密。 网站https://jwt.io/Woher weiß ich das Ablaufdatum?

Problemumgehung

Mit dem Beispiel-JWT-Token von jwt.io Dieser Code analysiert und ruft Ansprüche ohne verifizierte Signaturen ab:

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

In diesem Beispiel sollte die Ablaufzeit als claims 映射中的字段之一。要检索它,请使用 exp, ok := claims["expire"] erscheinen (abhängig vom genauen Namen).

Das obige ist der detaillierte Inhalt vonWie erhalte ich das Ablaufdatum vom JWT-Token in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen