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

# Token Exchange for Native Social

> Échangez un jeton issu d’un fournisseur social natif (comme Apple ou Google) contre des jetons Auth0 à l’aide du grant de token exchange.

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é **uniquement** aux interactions de social natif. L’utilisation de ce flux en dehors d’un contexte de social natif est fortement déconseillée.
</Note>

Lorsqu’une solution non basée sur un navigateur (comme le SDK d’une plateforme mobile) authentifie l’utilisateur, l’authentification se traduit généralement par le renvoi d’artefacts au code de l’application. Dans de telles situations, ce type de grant permet à la plateforme Auth0 d’accepter des artefacts provenant de sources fiables et d’émettre des jetons en réponse. Ainsi, les applications qui utilisent des mécanismes d’authentification non basés sur un navigateur (comme c’est souvent le cas dans les 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 (ainsi que leur contenu) seront déterminés par le `subject_token_type` et les paramètres de configuration du tenant.

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

* Les scopes accordés à 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 dont bénéficie l’application dans le cadre de ce grant. Vous pouvez personnaliser les scopes renvoyés dans une règle. Pour en savoir plus, consultez [Appeler des API à partir d’applications hautement fiables](https://auth0.com/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow).

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

* [Ajouter Sign In with Apple aux apps Native iOS](https://auth0.com/docs/authenticate/identity-providers/social-identity-providers/apple-native)
* [Quickstart iOS Swift - Sign In with 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 champ est facultatif et n’est requis que si votre application utilise Demonstrating Proof-of-Possession.
</ParamField>

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

<div className="prose-sm prose-gray dark:prose-invert">
  <span data-as="p">Le corps de la requête est au format `application/x-www-form-urlencoded`.</span>
</div>

<ParamField body="auth0-forwarded-for" type="string">
  Adresse IP de l'utilisateur final sous forme de chaîne. Définissez ce paramètre si vous voulez que la protection contre les attaques par force brute fonctionne dans des scénarios côté serveur. Pour en savoir plus sur la façon et le moment d'utiliser cet en-tête, consultez [Utiliser le mot de passe du propriétaire de la ressource côté serveur](/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 Token Exchange for Native Social, utilisez `urn:ietf:params:oauth:grant-type:token-exchange`.
</ParamField>

<ParamField body="subject_token" type="string" required>
  Artefact d'identité émis à l'externe représentant l'utilisateur.
</ParamField>

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

<ParamField body="client_id" type="string" required>
  Le Client ID 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 tenant Auth0. Il est utilisé comme solution de rechange à `audience` lorsque le [Resource Parameter Compatibility Profile](https://auth0.com/docs/get-started/tenant-settings#settings-advanced) du tenant est défini à `compatibility`.
</ParamField>

<ParamField body="scope" type="string">
  Valeur String 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 Native iOS dans lesquelles des mises à jour du profil peuvent survenir. La valeur attendue pour ce 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 ID é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 vie du jeton d’accès, en secondes.
  </ResponseField>
</ResponseSchema>

<ResponseSchema statusCode="default error">
  <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 |
