Heim >Backend-Entwicklung >Golang >Wie überprüfe ich JWT-Signaturen mithilfe von JWKs in Go?

Wie überprüfe ich JWT-Signaturen mithilfe von JWKs in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-12-28 17:00:12960Durchsuche

How to Verify JWT Signatures Using JWKs in Go?

Wie überprüfe ich die JWT-Signatur mit JWK in Go?

Eine Herausforderung bei der Authentifizierung von JWTs ist die Überprüfung von Signaturen. Dies gilt insbesondere für JWKs und die Go-Sprache.

Das Problem

Decoder ermöglichen uns das Parsen von JWTs. Allerdings stellt die Überprüfung von Signaturen, insbesondere bei JWKs, eine andere Herausforderung dar. Hier ist ein Beispiel für einen häufigen Fehler:

type myClaims struct {
    jwt.StandardClaims
}

func main() {
    claims := &myClaims{}

    _, err := jwt.ParseWithClaims("ey...", claims, getKey)
    if err != nil {
        log.Fatal(err)
    }
}

Fehler: Schlüssel „Kid“ nicht im Token gefunden

Die Lösung

Um dieses Problem zu beheben , müssen wir eine Keyfunc bereitstellen, die den öffentlichen Schlüssel abruft. Der folgende Code zeigt eine Lösung:

const jwksURL = "https://companyx.okta.com/oauth2/v1/keys"

func getKey(token *jwt.Token) (interface{}, error) {
    // TODO: Cache the response to avoid repeated HTTP requests
    set, err := jwk.FetchHTTP(jwksURL)
    if err != nil {
        return nil, err
    }
    keyID, ok := token.Header["kid"].(string)
    if !ok {
        return nil, errors.New("expecting JWT header to have string kid")
    }
    if key := set.LookupKeyID(keyID); len(key) == 1 {
        return key[0].Materialize()
    }
    return nil, fmt.Errorf("unable to find key %q", keyID)
}

Diese getKey-Funktion:

  1. Ruft die öffentlichen Schlüssel von einer bereitgestellten URL ab.
  2. Ruft die Schlüssel-ID von ab JWT-Header.
  3. Sucht den Schlüssel mithilfe der Schlüssel-ID.
  4. Materialisiert den Geben Sie den Schlüssel in eine Schnittstelle ein, die jwt-go zur Überprüfung verwenden kann.

Durch die Bereitstellung dieser getKey-Funktion können Sie JWT-Signaturen mithilfe von JWKs in Go erfolgreich überprüfen.

Das obige ist der detaillierte Inhalt vonWie überprüfe ich JWT-Signaturen mithilfe von JWKs in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn