Comment vérifier la signature JWT avec JWK dans Go ?
L'un des défis de l'authentification des JWT est la vérification des signatures. Cela est particulièrement vrai avec les JWK et le langage Go.
Le problème
Les décodeurs nous permettent d'analyser les JWT. Cependant, la vérification des signatures, notamment avec les JWK, présente un défi différent. Voici un exemple d'erreur courante :
type myClaims struct { jwt.StandardClaims } func main() { claims := &myClaims{} _, err := jwt.ParseWithClaims("ey...", claims, getKey) if err != nil { log.Fatal(err) } }
Erreur : clé "kid" introuvable dans le jeton
La solution
Pour résoudre ce problème , nous devons fournir un Keyfunc qui récupère la clé publique. Le code suivant illustre une solution :
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) }
Cette fonction getKey :
En fournissant cette fonction getKey, vous pouvez vérifier avec succès les signatures JWT à l'aide des JWK dans Go.
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!