Rotation des clés de connexion

Vous pouvez faire pivoter manuellement et périodiquement une clé de connexion afin de modifier la clé Web JSON (JWK) utilisée par les applications et les API pour valider les jetons. Si votre application ou API ne permet pas ce changement de clé et tente d’utiliser une clé de connexion expirée pour vérifier un jeton, la demande d’authentification échouera.

Bien qu’Auth0 n’utilise qu’une seule clé de connexion à la fois, le document de découverte OpenID Connect (OIDC) de votre locataire contient en permanence différentes clés. Le document de découverte OIDC inclura systématiquement la clé actuelle et la clé suivante, et il peut également inclure la clé précédente si cette dernière n’a pas encore été révoquée. Pour offrir une expérience transparente en cas d’urgence, votre application doit pouvoir utiliser n’importe laquelle des clés spécifiées dans le document. Pour en savoir plus sur les documents de découverte OpenID Connect, consultez Localiser les ensembles de clés JSON Web.

Vous pouvez faire pivoter la clé de connexion de l’application de votre locataire à l’aide de Auth0 Dashboard ou de Management API Auth0.

Utiliser le Dashboard

  1. Allez à Dashboard > Paramètres > Clés de connexion.

    Tableau de bord Paramètres de locataire Onglet Clés d’authentification
  2. Sous Rotation Settings (Paramètres de rotation), localisez Rotate Signing Key (Faire pivoter la clé de connexion) et sélectionnez Rotate Key (Faire pivoter la clé).

  3. Cliquez sur Rotation pour confirmer.

    Tableau de bord Paramètres Clés d’authentification Onglet Confirmation de la rotation

Utilisation de Management API

  1. Pour obtenir une liste des clés d’authentification, effectuez un appel GET au point de terminaison Obtenir toutes les clés de connexion d’application.

  2. Pour faire pivoter la clé de connexion, effectuez un appel POST au point de terminaison Rotate the Application Signing Key (Faire pivoter la clé de connexion d’application). Assurez-vous de remplacer la valeur de remplacement MGMT_API_ACCESS_TOKEN par votre jeton d’accès de Management API.

    
    
    curl --request POST \
      --url 'https://{yourDomain}/api/v2/keys/signing/rotate' \
      --header 'authorization: Bearer {yourMgmtApiAccessToken}'

    Was this helpful?

    /
    var client = new RestClient("https://{yourDomain}/api/v2/keys/signing/rotate");
    var request = new RestRequest(Method.POST);
    request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
    IRestResponse response = client.Execute(request);

    Was this helpful?

    /
    package main
    
    import (
    	"fmt"
    	"net/http"
    	"io/ioutil"
    )
    
    func main() {
    
    	url := "https://{yourDomain}/api/v2/keys/signing/rotate"
    
    	req, _ := http.NewRequest("POST", url, nil)
    
    	req.Header.Add("authorization", "Bearer {yourMgmtApiAccessToken}")
    
    	res, _ := http.DefaultClient.Do(req)
    
    	defer res.Body.Close()
    	body, _ := ioutil.ReadAll(res.Body)
    
    	fmt.Println(res)
    	fmt.Println(string(body))
    
    }

    Was this helpful?

    /
    HttpResponse<String> response = Unirest.post("https://{yourDomain}/api/v2/keys/signing/rotate")
      .header("authorization", "Bearer {yourMgmtApiAccessToken}")
      .asString();

    Was this helpful?

    /
    var axios = require("axios").default;
    
    var options = {
      method: 'POST',
      url: 'https://{yourDomain}/api/v2/keys/signing/rotate',
      headers: {authorization: 'Bearer {yourMgmtApiAccessToken}'}
    };
    
    axios.request(options).then(function (response) {
      console.log(response.data);
    }).catch(function (error) {
      console.error(error);
    });

    Was this helpful?

    /
    #import <Foundation/Foundation.h>
    
    NSDictionary *headers = @{ @"authorization": @"Bearer {yourMgmtApiAccessToken}" };
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/keys/signing/rotate"]
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:10.0];
    [request setHTTPMethod:@"POST"];
    [request setAllHTTPHeaderFields:headers];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                    if (error) {
                                                        NSLog(@"%@", error);
                                                    } else {
                                                        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                        NSLog(@"%@", httpResponse);
                                                    }
                                                }];
    [dataTask resume];

    Was this helpful?

    /
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => "https://{yourDomain}/api/v2/keys/signing/rotate",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_HTTPHEADER => [
        "authorization: Bearer {yourMgmtApiAccessToken}"
      ],
    ]);
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }

    Was this helpful?

    /
    import http.client
    
    conn = http.client.HTTPSConnection("")
    
    headers = { 'authorization': "Bearer {yourMgmtApiAccessToken}" }
    
    conn.request("POST", "/{yourDomain}/api/v2/keys/signing/rotate", headers=headers)
    
    res = conn.getresponse()
    data = res.read()
    
    print(data.decode("utf-8"))

    Was this helpful?

    /
    require 'uri'
    require 'net/http'
    require 'openssl'
    
    url = URI("https://{yourDomain}/api/v2/keys/signing/rotate")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    
    request = Net::HTTP::Post.new(url)
    request["authorization"] = 'Bearer {yourMgmtApiAccessToken}'
    
    response = http.request(request)
    puts response.read_body

    Was this helpful?

    /
    import Foundation
    
    let headers = ["authorization": "Bearer {yourMgmtApiAccessToken}"]
    
    let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/keys/signing/rotate")! as URL,
                                            cachePolicy: .useProtocolCachePolicy,
                                        timeoutInterval: 10.0)
    request.httpMethod = "POST"
    request.allHTTPHeaderFields = headers
    
    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
      if (error != nil) {
        print(error)
      } else {
        let httpResponse = response as? HTTPURLResponse
        print(httpResponse)
      }
    })
    
    dataTask.resume()

    Was this helpful?

    /
    Valeur Description
    MGMT_API_ACCESS_TOKEN Access Token for the Management API (Jeton d’accès pour Management API) avec les permissions create:signing_keys et update:signing_keys.

Impact de la rotation des clés

API et passerelles API qui acceptent les jetons d’accès

La plupart des logiciels médiateurs et des passerelles API utilisent le point de terminaison JSON web key set (JWKS) pour récupérer les clés de connexion actuelles et futures à un certain intervalle. Si votre logiciel médiateur et/ou vos passerelles API ne prennent pas en charge ce point de terminaison et nécessitent que vous configuriez manuellement un fichier *.cer, vous allez devoir coordonner la rotation des clés de connexion dans Auth0 avec la reconfiguration de votre logiciel médiateur et de vos passerelles.

Applications Web standard

Lors de la rotation de la clé de connexion dans Auth0, vous devrez coordonner la reconfiguration de vos applications qui utilisent WS-Fed ou SAML. Cela se produit généralement lorsque vous téléversez le nouveau certificat public ou que vous reconfigurez l’application en saisissant l’URL des métadonnées WS-Fed/SAMLURL. Cela modifiera la clé JWKS, qui est utilisée par les applications pour valider les jetons. Assurez-vous que votre implémentation ne suppose pas que les clés JWKS ne sont pas modifiées.

En savoir plus