Passer au contenu principal
Les clés d’accès sont une solution de rechange résistante à l’hameçonnage aux méthodes d’authentification traditionnelles (comme le nom d’utilisateur et le mot de passe) et offrent une expérience utilisateur plus simple et plus sécuritaire. Elles reposent sur les spécifications FIDO® W3C Web Authentication (WebAuthn) et Client to Authenticator Protocol (CTAP). Auth0 prend actuellement en charge les clés d’accès comme méthode d’authentification pour les connexions de base de données et offre deux méthodes de mise en œuvre :

Fonctionnement

Les clés d’accès natives utilisent une combinaison de l’API d’authentification Auth0 et des API natives d’iOS ou d’Android pour intégrer directement les flux de vérification à votre application mobile. Cela vous permet de créer, pour votre application, une expérience intégrée d’inscription et de connexion sans devoir rediriger les utilisateurs vers leur navigateur pour terminer l’authentification. L’exemple suivant montre ce qu’un nouvel utilisateur peut vivre pendant le flux d’inscription avec clé d’accès :
  1. Un nouvel utilisateur lance votre application mobile et accède à l’écran de connexion. Comme il s’agit d’un nouvel utilisateur, il sélectionne le bouton S’inscrire.
  2. À l’écran suivant, l’utilisateur saisit son adresse courriel et sélectionne Créer un compte.
  3. Ensuite, on demande à l’utilisateur s’il souhaite créer une clé d’accès pour votre application. Pour continuer, l’utilisateur sélectionne Continuer.
  4. Pour générer une clé d’accès, l’utilisateur doit s’authentifier localement sur son appareil à l’aide de données biométriques ou d’une autre méthode d’authentification, comme la saisie d’un NIP.
  5. Une fois l’authentification locale terminée, une nouvelle clé d’accès est enregistrée sur l’appareil de l’utilisateur et synchronisée avec son fournisseur de clés d’accès, comme iCloud ou Google.
  6. Une fois la clé d’accès enregistrée, l’utilisateur poursuit le processus d’inscription afin de finaliser son compte.
Une fois ce processus terminé, l’utilisateur peut s’authentifier avec sa clé d’accès enregistrée la prochaine fois qu’il se connecte à votre application.

Avant de commencer

Configurer un domaine personnalisé

Les clés d’accès natives nécessitent l’utilisation d’un . Avant de continuer, assurez-vous d’avoir configuré un domaine personnalisé pour votre locataire. Pour en savoir plus, consultez Custom Domains.

Configurer votre stratégie de clés d’accès

Avant de pouvoir implémenter des clés d’accès natives pour les applications Android ou iOS, vous devez configurer une stratégie de clés d’accès dans votre locataire Auth0. Pour préparer votre locataire, suivez les étapes de Configurer la stratégie de clés d’accès.

Préparez votre application

Pour préparer votre application à l’utilisation de clés d’accès natives, vous devez configurer vos paramètres de l’appareil et ajouter le grant Passkey. Vous pouvez effectuer cette configuration dans votre ou au moyen de la .

Domaines associés

Pour permettre aux utilisateurs finaux de s’authentifier à l’aide d’une seule clé d’accès dans différents types d’applications, ou dans des applications ayant des sous-domaines différents, définissez le Relying Party ID sur le domaine racine ou parent. Pour en savoir plus, consultez Passkeys.

Configurer Auth0 Dashboard

  1. Accédez à Applications > Applications et sélectionnez l’application à mettre à jour.
  2. Au bas de l’onglet Settings, sélectionnez Advanced Settings. Ensuite, choisissez l’onglet Device Settings.
  3. Remplissez les sections iOS et Android selon les besoins de votre application. Ensuite, cliquez sur Save Changes.
  4. Dans la section Advanced Settings, sélectionnez l’onglet Grant Types.
  5. Activez le type d’autorisation Passkey, puis sélectionnez Save Changes.

Management API

Appelez le point de terminaison Mettre à jour une application, puis :
  • Mettez à jour grant_types pour y inclure urn:okta:params:oauth:grant-type:webauthn.
  • Utilisez l’objet mobile pour définir, au besoin, les paramètres des appareils iOS et Android.

Implémenter les flux de clés d’accès

Vous pouvez définir les flux de clés d’accès suivants pour votre application :
  • Flux d’inscription : permet aux nouveaux utilisateurs de générer et d’enregistrer une clé d’accès au cours du processus d’inscription.
  • Flux de connexion : permet à un utilisateur existant, déjà inscrit aux clés d’accès, de s’authentifier avec sa clé d’accès enregistrée au cours du processus de connexion.

Flux d’inscription

Un utilisateur lance le flux d’inscription par clé d’accès lorsqu’il tente de se connecter à votre application pour la première fois. Si l’utilisateur fournit un identifiant qui existe déjà, il est recommandé de l’inviter à terminer le flux de connexion à la place. Sinon, l’opération échouera.

Étapes du flux

  1. Un utilisateur accède à votre application et choisit de créer un nouveau compte. L’utilisateur fournit un identifiant demandé par votre application, comme son adresse courriel.
  2. Votre application amorce ensuite le défi d’inscription en appelant le point de terminaison Demander un défi d’inscription de l’API d’authentification d’Auth0 :
  • Si vous ne précisez pas de realm, le répertoire par défaut de votre locataire est utilisé.
  • Par défaut, email est l’identifiant requis. Si vous avez activé les Identifiants flexibles pour votre connexion de base de données, vous pouvez plutôt utiliser une combinaison de email, phone_number ou username. Ces options peuvent être obligatoires ou facultatives et doivent correspondre à votre configuration des identifiants flexibles.
   POST /passkey/register
   Content-Type: application/json

   {
     "client_id": "{YOUR_CLIENT_ID}",
     "realm": "{OPTIONAL_CONNECTION}",
     "user_profile": {
   	  "email": "{VALID_EMAIL_ADDRESS}",
   	  "name": "{OPTIONAL_USER_DISPLAY_NAME}",
     }
   }
  1. En réponse, Auth0 renvoie PublicKeyCredentialCreationOptions avec un ID auth_session et rpId sous la forme de rp.id :
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "authn_params_public_key": {
        "challenge": "{GENERATED_CHALLENGE_FOR_THIS_SESSION}",
        "timeout": {MILLISECONDS},
        "rp": {
          "id": "{YOUR_CUSTOM_DOMAIN}",
          "name": "{YOUR_CUSTOM_DOMAIN}"
        },
        "pubKeyCredParams": [
          { type: 'public-key', alg: -8 },
          { type: 'public-key', alg: -7 },
          { type: 'public-key', alg: -257 }
        ],
        "authenticatorSelection": {
          "residentKey": "required",
          "userVerification": "preferred"
        },
        "user": {
          "id": "{GENERATED_ID}",
          "name": "{USER-ENTERED_IDENTIFIER}",
          "displayName": "{USER-ENTERED_DISPLAY_NAME_OR_IDENTIFIER_IF_MISSING}"
        }
      },
      "auth_session": "{SESSION_ID}"
     }
    
    Le rpId renvoyé dans la réponse correspond au domaine utilisé dans le flux Web afin que les clés d’accès fonctionnent dans les domaines associés.
  2. Votre application termine ensuite le processus d’inscription de l’utilisateur à l’aide des API natives appropriées :
  3. Votre application utilise ensuite les informations d’identification obtenues pendant le processus d’inscription, y compris les détails de authn_response, pour appeler le point de terminaison Token :
    POST /oauth/token
    Content-Type: application/json
    
    {
      "grant_type": "urn:okta:params:oauth:grant-type:webauthn",
      "client_id": "{YOUR_CLIENT_ID}",
      "realm": "{OPTIONAL_CONNECTION}",
      "scope": "{OPTIONAL_REQUESTED_SCOPE}",
      "audience": "{OPTIONAL_REQUESTED_AUDIENCE}"
      "auth_session": "{SESSION_ID_FROM_THE_FIRST_REQUEST}",
      "authn_response": {
        "id": "{BASE64URL_ID}",
        "rawId": "{BASE64URL_RAWID}",
        "type": "public-key",
        "authenticatorAttachment": "platform|cross-platform",
        "response": {
          "clientDataJSON": "{BASE64URL_CLIENT_DATA_JSON}",
          "attestationObject": "{BASE64URL_ATTESTATION_OBJECT}",
          {OTHER_PROPERTIES}
        },
      },
    }
    
  4. Auth0 crée un nouveau compte d’utilisateur et renvoie les jetons demandés pour terminer le flux :
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "access_token": "{BASE64_TOKEN}",
      "refresh_token": "{BASE64_TOKEN}",
      "id_token": "{BASE64_TOKEN}",
      "token_type": "Bearer",
      "expires_in": {SECONDS}
    }
    

Flux de connexion

Un utilisateur existant amorce le flux de connexion par clé d’accès lorsqu’il tente de se connecter à votre application. Ce flux s’applique uniquement aux utilisateurs existants qui ont enregistré des clés d’accès associées à leur compte lors de l’inscription initiale.

Étapes du flux

  1. Un utilisateur lance votre application et commence le processus de connexion. Votre application lance ensuite le défi de connexion en appelant le point de terminaison Request Login Challenge de l’API d’authentification :
    Si vous ne précisez pas de realm, l’annuaire par défaut de votre locataire est utilisé.
    POST /passkey/challenge
    Content-Type: application/json
    
    {
      "client_id": "{YOUR_CLIENT_ID}",
      "realm": "{OPTIONAL_CONNECTION}"
    }
    
  2. En réponse, Auth0 renvoie PublicKeyCredentialRequestOptions ainsi qu’un auth_session pour poursuivre le flux dans votre application :
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "authn_params_public_key": {
        "challenge": "{GENERATED_CHALLENGE_FOR_THIS_SESSION}",
        "timeout": {AUTH_TIMEOUT_IN_MILLISECONDS},
        "rpId": "{CUSTOM_DOMAIN}",
        "userVerification": "preferred"
      },
      "auth_session": "{SESSION_ID}"
    }
    
  3. Votre application termine ensuite le processus de connexion à l’aide des API natives appropriées :
  4. Votre application utilise ensuite les données d’authentification obtenues pendant le processus de connexion, y compris les détails authn_response, pour appeler le point de terminaison Token :
    POST /oauth/token
    Content-Type: application/json
    
    {
      "grant_type": "urn:okta:params:oauth:grant-type:webauthn",
      "client_id": "{YOUR_CLIENT_ID}",
      "realm": "{OPTIONAL_CONNECTION}",
      "scope": "{OPTIONAL_REQUESTED_SCOPE}",
      "audience": "{OPTIONAL_REQUESTED_AUDIENCE}"
      "auth_session": "{SESSION_ID_FROM_THE_FIRST_REQUEST}",
      "authn_response": {
        "id": "{BASE64URL_ID}",
        "rawId": "{BASE64URL_RAWID}",
        "type": "public-key",
        "authenticatorAttachment": "platform|cross-platform",
        "response": {
          "authenticatorData": "{BASE64URL_AUTHENTICATORDATA}",
          "clientDataJSON": "{BASE64URL_CLIENTDATAJSON}",
          "signature": "{BASE64URL_SIGNATURE}",
          "userHandle": "{BASE64URL_USERHANDLE}"
        },
        "clientExtensionResults": {OPTIONAL_OBJECT}
       }
    }
    
  5. Auth0 authentifie les informations d’identification et renvoie les jetons demandés pour terminer le flux :
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
      "access_token": "{BASE64_TOKEN}",
      "refresh_token": "{BASE64_TOKEN}",
      "id_token": "{BASE64_TOKEN}",
      "token_type": "Bearer",
      "expires_in": {SECONDS}
    }
    

Références

Les ressources suivantes peuvent servir de référence pour la mise en œuvre de clés d’accès natives dans votre application mobile :