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
Allez à Dashboard > Paramètres > Clés de connexion.
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é).
Cliquez sur Rotation pour confirmer.
Utilisation de Management API
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.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 remplacementMGMT_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
etupdate: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.