> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Découvrez comment faire la rotation du Secret client d'une application à l'aide de l'Auth0 Dashboard ou de la Management API.

# Rotation des Secrets client

export const AuthCodeGroup = ({children, dropdown}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        const processChildren = node => {
          if (typeof node === "string") {
            let processedNode = node;
            for (const [key, value] of window.rootStore.variableStore.values.entries()) {
              const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
              processedNode = processedNode.replaceAll(new RegExp(escapedKey, "g"), value);
            }
            return processedNode;
          } else if (Array.isArray(node)) {
            return node.map(processChildren);
          } else if (node && node.props && node.props.children) {
            return {
              ...node,
              props: {
                ...node.props,
                children: processChildren(node.props.children)
              }
            };
          }
          return node;
        };
        setProcessedChildren(processChildren(children));
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeGroup dropdown={dropdown}>{processedChildren}</CodeGroup>;
};

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****MASKED*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Vous pouvez modifier le <Tooltip tip="Secret client : secret utilisé par une application cliente pour s’authentifier auprès du serveur d’autorisation; il ne devrait être connu que de l’application cliente et du serveur d’autorisation, et doit être suffisamment aléatoire pour ne pas pouvoir être deviné." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=client+secret">Secret client</Tooltip> d’une application à l’aide du <Tooltip tip="Secret client : secret utilisé par une application cliente pour s’authentifier auprès du serveur d’autorisation; il ne devrait être connu que de l’application cliente et du serveur d’autorisation, et doit être suffisamment aléatoire pour ne pas pouvoir être deviné." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> ou de la <Tooltip tip="Auth0 Dashboard : principal produit d’Auth0 pour configurer vos services." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Management+API">Management API</Tooltip> d’Auth0. Lorsque vous effectuez la rotation d’un Secret client, vous devez mettre à jour toutes les applications autorisées avec la nouvelle valeur.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les Secrets client ne doivent pas être stockés dans des applications clientes publiques. Pour en savoir plus, consultez [Applications confidentielles et applications publiques.](/fr-CA/docs/get-started/applications/confidential-and-public-applications)
</Callout>

<Warning>
  Les nouveaux secrets peuvent prendre jusqu’à trente secondes avant d’être pris en compte pendant la rotation. Pour réduire au minimum les interruptions, nous vous recommandons d’enregistrer le nouveau Secret client dans le code ou la configuration système de votre application comme solution de rechange à l’ancien secret. Ainsi, si la requête de l’application cliente ne fonctionne pas avec l’ancien secret, votre application utilisera le nouveau secret.

  Les secrets peuvent être conservés dans une liste (ou une structure semblable) jusqu’à ce qu’ils ne soient plus nécessaires. Une fois que vous êtes certain qu’un ancien secret est obsolète, vous pouvez supprimer sa valeur du code de votre application.
</Warning>

<div id="use-the-dashboard">
  ## Utiliser l’Auth0 Dashboard
</div>

1. Dans l’Auth0 Dashboard, accédez à [Applications > Applications](https://manage.auth0.com/#/applications), puis sélectionnez le nom de l’application à consulter.

   <Frame>
     <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1ecNwGgFQZxdP57p0tp3jT/cd608fcfae22e195b604e2707e5a848d/App_List_-_EN.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=dbea1d7710544fca12dda3c859a64f7c" alt="Liste des applications dans l’Auth0 Dashboard" width="1102" height="723" data-path="docs/images/cdy7uua7fh8z/1ecNwGgFQZxdP57p0tp3jT/cd608fcfae22e195b604e2707e5a848d/App_List_-_EN.png" />
   </Frame>
2. Faites défiler jusqu’au bas de la page **Settings**, repérez la section **Danger Zone**, sélectionnez **Rotate**, puis confirmez.
3. Revenez en haut de la page, puis ouvrez l’onglet **Credentials**.
4. Affichez votre nouveau secret en repérant **Client Secret** et en sélectionnant l’icône en forme d’œil.

   <Frame>
     <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2GPUw7BODYuYYH3658Upz3/92a49ec57e6b4d07be96093989baac03/2023-04-11_15-34-58.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=05a38bc0c648b9a92efa5969ce90297b" alt="Informations de base de l’onglet des paramètres de l’application dans l’Auth0 Dashboard" width="1039" height="673" data-path="docs/images/cdy7uua7fh8z/2GPUw7BODYuYYH3658Upz3/92a49ec57e6b4d07be96093989baac03/2023-04-11_15-34-58.png" />
   </Frame>
5. Mettez à jour les applications autorisées avec la nouvelle valeur.

<div id="use-the-management-api">
  ## Utiliser la Management API
</div>

1. Appelez le point de terminaison [Rotate a client secret](https://auth0.com/docs/api/management/v2#!/Clients/post_rotate_secret) de la Management API. Remplacez les valeurs de substitution `{yourClientId}` et `MGMT_API_ACCESS_TOKEN` par votre ID client et votre jeton d’accès de la Management API, respectivement.

<AuthCodeGroup>
  ```bash cURL theme={null}
     curl --request POST \
  --url 'https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret' \
  --header 'authorization: Bearer {yourMgmtApiAccessToken}'

  ```

  ```csharp C# theme={null}
     var client = new RestClient("https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret");
  var request = new RestRequest(Method.POST);
  request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
  IRestResponse response = client.Execute(request);

  ```

  ```go Go theme={null}
     package main

  import (
  "fmt"
  "net/http"
  "io/ioutil"
  )

  func main() {

  url := "https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret"

  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))

  }

  ```

  ```java Java theme={null}
     HttpResponse response = Unirest.post("https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret")
    .header("authorization", "Bearer {yourMgmtApiAccessToken}")
    .asString();

  ```

  ```javascript Node.JS theme={null}
     var axios = require("axios").default;

  var options = {
    method: 'POST',
    url: 'https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret',
    headers: {authorization: 'Bearer {yourMgmtApiAccessToken}'}
  };

  axios.request(options).then(function (response) {
    console.log(response.data);
  }).catch(function (error) {
    console.error(error);
  });

  ```

  ```php PHP theme={null}
     $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret",
    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;
  }

  ```

  ```python Python theme={null}
     import http.client

  conn = http.client.HTTPSConnection("")

  headers = { 'authorization': "Bearer {yourMgmtApiAccessToken}" }

  conn.request("POST", "/{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret", headers=headers)

  res = conn.getresponse()

  data = res.read()

  print(data.decode("utf-8"))

  ```

  ```ruby Ruby theme={null}
     require 'uri'
  require 'net/http'
  require 'openssl'
  url = URI("https://{yourDomain}/api/v2/clients/%7ByourClientId%7D/rotate-secret")
  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

  ```
</AuthCodeGroup>

| Valeur                  | Description                                                                                                                  |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `{yourClientId}`        | L’ID de l’application à mettre à jour.                                                                                       |
| `MGMT_API_ACCESS_TOKEN` | [Jetons d’accès pour la Management API](https://auth0.com/docs/api/management/v2/tokens) avec le scope `update:client_keys`. |

2. Mettez à jour les applications autorisées avec la nouvelle valeur.

<div id="set-a-custom-client-secret">
  ### Définir un secret client personnalisé
</div>

Vous pouvez utiliser le point de terminaison de la Management API [Mettre à jour une application](https://auth0.com/docs/api/management/v2/#!/Clients/patch_clients_by_id) pour définir manuellement un secret client au lieu de demander une rotation vers un secret généré automatiquement. Votre application est configurée à l’avance avec le futur secret comme solution de secours, avant la rotation effective.

```bash lines theme={null}
   curl --request PATCH \
   --url https://{TenantDomain}/api/v2/clients/{ClientID} \
   --header 'Authorization: Bearer {AccessToken}' \
   --header 'Content-Type: application/json' \
   --data '{
      "client_secret": "{CustomClientSecret}"
      }'
```

<div id="learn-more">
  ## En savoir plus
</div>

* [Consulter les certificats de signature](/fr-CA/docs/get-started/tenant-settings/signing-keys/view-signing-certificates)
* [Algorithmes de signature](/fr-CA/docs/get-started/applications/signing-algorithms)
* [Modifier les algorithmes de signature de l’application](/fr-CA/docs/get-started/applications/change-application-signing-algorithms)
