Heim >Backend-Entwicklung >Golang >Wie überprüfe ich JWT-Signaturen mithilfe von 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:
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!