> ## 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.

# Échange de jetons pour l’authentification sociale native

> Échangez un jeton social natif (comme un jeton Apple ou Google) contre des jetons Auth0 au moyen de l’octroi d’échange de jetons.

export const ResponseSchema = ({statusCode, type = "{}", children}) => {
  const [open, setOpen] = useState(false);
  return <div className="border border-gray-100 dark:border-gray-800 rounded-lg mb-3 overflow-hidden">
      <div className={`flex items-center gap-2.5 px-4 py-2.5 cursor-pointer select-none ${open ? "bg-gray-50 dark:bg-gray-800" : ""}`} onClick={() => setOpen(!open)}>
        {statusCode && <span className="border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 font-mono text-xs px-1.5 py-0.5 rounded">
            {statusCode.startsWith("default") ? "default" : statusCode}
          </span>}
        <span className="text-gray-500 dark:text-gray-400 text-sm font-mono">
          {type}
        </span>
        <span className="text-gray-400 dark:text-gray-500 text-sm italic">
          application/json
        </span>
        <svg className={`ml-auto opacity-50 transition-transform duration-200 ${open ? "rotate-180" : ""}`} width="16" height="16" viewBox="0 0 16 16" fill="none">
          <path d="M4 6l4 4 4-4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
        </svg>
      </div>
      {open && <div className="px-4 pt-1 pb-3 border-t border-gray-100 dark:border-gray-800">
          {children}
        </div>}
    </div>;
};

<div id="endpoint">
  ## Point de terminaison
</div>

`POST /oauth/token`

<Note>
  Ce flux est destiné à être utilisé **uniquement** avec des interactions sociales natives. L’utilisation de ce flux en dehors d’un contexte social natif est fortement déconseillée.
</Note>

Lorsqu’une solution sans navigateur (comme le SDK d’une plateforme mobile) authentifie l’utilisateur, l’authentification produit généralement des artefacts qui sont renvoyés au code de l’application. Dans ce type de situation, ce type d’autorisation permet à la plateforme Auth0 d’accepter des artefacts provenant de sources fiables et d’émettre des jetons en retour. Ainsi, les applications qui utilisent des mécanismes d’authentification sans navigateur (comme c’est souvent le cas des applications natives) peuvent tout de même récupérer des jetons Auth0 sans nécessiter d’interaction supplémentaire de l’utilisateur.

Les artefacts renvoyés par ce flux (et leur contenu) seront déterminés par le `subject_token_type` et les paramètres de configuration du locataire.

<div id="remarks">
  ## Remarques
</div>

* Les scopes émis pour l’application peuvent différer des scopes demandés. Dans ce cas, un paramètre `scope` sera inclus dans la réponse JSON.
* Si vous ne demandez pas de scopes précis, tous les scopes définis pour l’audience seront renvoyés en raison de la confiance implicite accordée à l’application dans ce grant. Vous pouvez personnaliser les scopes renvoyés dans une Rule. Pour en savoir plus, consultez [Calling APIs from Highly Trusted Applications](https://auth0.com/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow).

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

* [Ajouter « Se connecter avec Apple » aux applications iOS natives](https://auth0.com/docs/authenticate/identity-providers/social-identity-providers/apple-native)
* [iOS Swift - Démarrage rapide pour « Se connecter avec Apple »](https://auth0.com/docs/quickstart/native/ios-swift)

<div id="headers">
  ## En-têtes
</div>

<ParamField header="DPoP" type="string">
  Une preuve DPoP pour la requête. Ce paramètre est facultatif et n’est requis que si votre application utilise le mécanisme Demonstrating Proof-of-Possession.
</ParamField>

<div id="body-parameters">
  ## Paramètres du corps
</div>

<ParamField body="auth0-forwarded-for" type="string">
  Adresse IP de l’utilisateur final sous forme de chaîne de caractères. Définissez cette valeur si vous voulez que la protection contre les attaques par force brute fonctionne dans les scénarios côté serveur. Pour en savoir plus sur la façon et le moment d’utiliser cet en-tête, consultez [Using resource owner password from server-side](/fr-CA/api-auth/tutorials/using-resource-owner-password-from-server-side).
</ParamField>

<ParamField body="grant_type" type="string" required>
  Indique le flux que vous utilisez. Pour Échange de jetons pour l’authentification sociale native, utilisez `urn:ietf:params:oauth:grant-type:token-exchange`.
</ParamField>

<ParamField body="subject_token" type="string" required>
  Artefact d’identité émis par un système externe qui représente l’utilisateur.
</ParamField>

<ParamField body="subject_token_type" type="string" required>
  Identifiant qui indique le type de `subject_token`.
</ParamField>

<ParamField body="client_id" type="string" required>
  L’ID client de votre application.
</ParamField>

<ParamField body="audience" type="string">
  L’identifiant unique de l’API cible à laquelle vous voulez accéder.
</ParamField>

<ParamField body="resource" type="string">
  L’identifiant de l’API cible (serveur de ressources) à laquelle vous voulez accéder. Il doit correspondre à un identifiant d’API enregistré dans votre locataire Auth0. Il est utilisé comme alternative à `audience` lorsque le [Resource Parameter Compatibility Profile](https://auth0.com/docs/get-started/tenant-settings#settings-advanced) du locataire est défini sur `compatibility`.
</ParamField>

<ParamField body="scope" type="string">
  Valeur de chaîne des différents scopes demandés par l’application. Plusieurs scopes sont séparés par des espaces.
</ParamField>

<ParamField body="user_profile" type="object">
  Élément facultatif utilisé pour les interactions iOS natives dans lesquelles des mises à jour du profil peuvent se produire. La valeur attendue du paramètre est du JSON sous la forme suivante : `{ name: { firstName: 'John', lastName: 'Smith' }}`.

  <Expandable title="propriétés">
    <ParamField body="name" type="object" />
  </Expandable>
</ParamField>

<div id="response-schema">
  ## Schéma de réponse
</div>

<ResponseSchema statusCode="200">
  <ResponseField name="access_token" type="string">
    Le jeton d’accès émis.
  </ResponseField>

  <ResponseField name="id_token" type="string">
    Le jeton d’identité émis.
  </ResponseField>

  <ResponseField name="refresh_token" type="string">
    Le jeton d’actualisation émis.
  </ResponseField>

  <ResponseField name="token_type" type="string">
    Le type de jeton émis.
  </ResponseField>

  <ResponseField name="expires_in" type="integer">
    La durée de validité du jeton d’accès, en secondes.
  </ResponseField>
</ResponseSchema>

<ResponseSchema statusCode="erreur par défaut">
  <ResponseField name="error" type="string">
    Code d’erreur.
  </ResponseField>

  <ResponseField name="error_description" type="string">
    Description de l’erreur.
  </ResponseField>
</ResponseSchema>

<div id="response-messages">
  ## Messages de réponse
</div>

| Statut  | Description       |
| ------- | ----------------- |
| 200     | Réponse réussie   |
| default | Erreur inattendue |
