Utilisation de la sécurité Duo avec des domaines d'identité

Mise à jour des paramètres du facteur d'authentification avec les paramètres de sécurité Duo

L'exemple suivant montre comment mettre à jour les paramètres d'authentification multifacteur pour un locataire en soumettant une demande PUT sur la ressource REST à l'aide de cURL. Pour plus d'informations sur cURL, voir Utiliser cURL.

Commande cURL

Note

La commande de cet exemple utilise la structure d'URL https://<domainURL>/resource-path, où <domainURL> représente l'URL du service d'identité et le chemin de ressource représente l'API du service d'identité. Voir Envoyer des demandes pour la structure d'URL appropriée à utiliser.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Corps de demande

Voici un exemple de corps de demande au format JSON :
Exemple de corps d'une demande
{
  "bypassCodeSettings": {
    "helpDeskCodeExpiryInMins": 60,
    "helpDeskGenerationEnabled": true,
    "helpDeskMaxUsage": 5,
    "length": 12,
    "maxActive": 5,
    "selfServiceGenerationEnabled": true
  },
  "clientAppSettings": {
    "deviceProtectionPolicy": "NONE",
    "initialLockoutPeriodInSecs": 30,
    "keyPairLength": 2048,
    "lockoutEscalationPattern": "Constant",
    "maxFailuresBeforeLockout": 10,
    "maxFailuresBeforeWarning": 5,
    "maxLockoutIntervalInSecs": 86400,
    "minPinLength": 6,
    "policyUpdateFreqInDays": 7,
    "requestSigningAlgo": "SHA256withRSA",
    "sharedSecretEncoding": "Base32",
    "unlockAppForEachRequestEnabled": false,
    "unlockAppIntervalInSecs": 300,
    "unlockOnAppForegroundEnabled": false,
    "unlockOnAppStartEnabled": false
  },
  "compliancePolicy": [
    {
      "action": "Allow",
      "name": "lockScreenRequired",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "lockScreenRequiredUnknown",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "jailBrokenDevice",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "jailBrokenDeviceUnknown",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "minWindowsVersion",
      "value": "8.1"
    },
    {
      "action": "Allow",
      "name": "minIosVersion",
      "value": "7.1"
    },
    {
      "action": "Allow",
      "name": "minAndroidVersion",
      "value": "4.1"
    },
    {
      "action": "Allow",
      "name": "minIosAppVersion",
      "value": "4.0"
    },
    {
      "action": "Allow",
      "name": "minAndroidAppVersion",
      "value": "8.0"
    },
    {
      "action": "Allow",
      "name": "minWindowsAppVersion",
      "value": "1.0"
    }
  ],
  "endpointRestrictions": {
    "maxEndpointTrustDurationInDays": 15,
    "maxEnrolledDevices": 5,
    "maxTrustedEndpoints": 5,
    "trustedEndpointsEnabled": true,
    "maxIncorrectAttempts": 10
  },
  "id": "AuthenticationFactorSettings",
  "mfaEnrollmentType": "Required",
  "pushEnabled": false,
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorSettings"
  ],
  "thirdPartyFactor": {
        "duoSecurity": true
    },
  "notificationSettings": {
        "pullEnabled": true
    },
     "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
        "duoSecuritySettings": {
            "integrationKey": "XXXXXXXXXXXXXXXXXXXX",
            "secretKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "apiHostname": "api-example.duosecurity.com",
            "userMappingAttribute": "userName"
    }
    },
  "securityQuestionsEnabled": false,
  "smsEnabled": false,
  "emailEnabled": false,
  "bypassCodeEnabled": false,
  "totpEnabled": false,
  "totpSettings": {
    "hashingAlgorithm": "SHA1",
    "jwtValidityDurationInSecs": 300,
    "keyRefreshIntervalInDays": 60,
    "passcodeLength": 6,
    "smsOtpValidityDurationInMins": 10,
    "smsPasscodeLength": 6,
    "timeStepInSecs": 30,
    "timeStepTolerance": 3,
	"emailOtpValidityDurationInMins": 10,
	"emailPasscodeLength": 6
  },
  "mfaEnabledCategory": "NONE"
}

Corps de la réponse

L'exemple suivant montre le contenu du corps de la réponse au format JSON :

Exemple de corps de réponse
{
    "bypassCodeSettings": {
        "helpDeskCodeExpiryInMins": 60,
        "helpDeskGenerationEnabled": true,
        "helpDeskMaxUsage": 5,
        "length": 12,
        "maxActive": 5,
        "selfServiceGenerationEnabled": true
    },
    "clientAppSettings": {
        "deviceProtectionPolicy": "NONE",
        "initialLockoutPeriodInSecs": 30,
        "keyPairLength": 2048,
        "lockoutEscalationPattern": "Constant",
        "maxFailuresBeforeLockout": 10,
        "maxFailuresBeforeWarning": 5,
        "maxLockoutIntervalInSecs": 86400,
        "minPinLength": 6,
        "policyUpdateFreqInDays": 7,
        "requestSigningAlgo": "SHA256withRSA",
        "sharedSecretEncoding": "Base32",
        "unlockAppForEachRequestEnabled": false,
        "unlockAppIntervalInSecs": 300,
        "unlockOnAppForegroundEnabled": false,
        "unlockOnAppStartEnabled": false
    },
    "compliancePolicy": [
        {
            "action": "Allow",
            "name": "lockScreenRequired",
            "value": "false"
        },
        {
            "action": "Allow",
            "name": "lockScreenRequiredUnknown",
            "value": "false"
        },
        {
            "action": "Allow",
            "name": "jailBrokenDevice",
            "value": "false"
        },
        {
            "action": "Allow",
            "name": "jailBrokenDeviceUnknown",
            "value": "false"
        },
        {
            "action": "Allow",
            "name": "minWindowsVersion",
            "value": "8.1"
        },
        {
            "action": "Allow",
            "name": "minIosVersion",
            "value": "7.1"
        },
        {
            "action": "Allow",
            "name": "minAndroidVersion",
            "value": "4.1"
        },
        {
            "action": "Allow",
            "name": "minIosAppVersion",
            "value": "4.0"
        },
        {
            "action": "Allow",
            "name": "minAndroidAppVersion",
            "value": "8.0"
        },
        {
            "action": "Allow",
            "name": "minWindowsAppVersion",
            "value": "1.0"
        }
    ],
    "endpointRestrictions": {
        "maxEndpointTrustDurationInDays": 15,
        "maxEnrolledDevices": 5,
        "maxTrustedEndpoints": 5,
        "trustedEndpointsEnabled": true,
        "maxIncorrectAttempts": 10
    },
    "id": "AuthenticationFactorSettings",
    "mfaEnrollmentType": "Required",
    "pushEnabled": false,
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorSettings"
    ],
    "thirdPartyFactor": {
        "duoSecurity": true
    },
    "notificationSettings": {
        "pullEnabled": true
    },
    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
        "duoSecuritySettings": {
            "integrationKey": "XXXXXXXXXXXXXXXXXXXX",
            "secretKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "apiHostname": "api-example.duosecurity.com",
            "userMappingAttribute": "userName"
        }
    },
    "securityQuestionsEnabled": false,
    "smsEnabled": false,
    "emailEnabled": false,
    "bypassCodeEnabled": false,
    "totpEnabled": false,
    "totpSettings": {
        "hashingAlgorithm": "SHA1",
        "jwtValidityDurationInSecs": 300,
        "keyRefreshIntervalInDays": 60,
        "passcodeLength": 6,
        "smsOtpValidityDurationInMins": 10,
        "smsPasscodeLength": 6,
        "timeStepInSecs": 30,
        "timeStepTolerance": 3,
        "emailOtpValidityDurationInMins": 10,
        "emailPasscodeLength": 6
    },
    "meta": {
        "lastModified": "2022-10-15T07:44:53.601Z",
        "resourceType": "AuthenticationFactorSettings",
        "created": "2022-10-04T06:56:10.285Z",
        "location": "https://<domainURL>/admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings"
    },
    "idcsLastModifiedBy": {
        "value": "5753639d3ca046f094a8f4aeaf9ea5e5",
        "type": "App",
        "display": "testPostman",
        "$ref": "https://<domainURL>/admin/v1/Apps/5753639d3ca046f094a8f4aeaf9ea5e5"
    },
    "idcsCreatedBy": {
        "value": "c480fd39014e40f3bf4f963b3b6a423b",
        "type": "App",
        "display": "idcssm",
        "$ref": "https://<domainURL>/admin/v1/Apps/c480fd39014e40f3bf4f963b3b6a423b"
    },
    "mfaEnabledCategory": "NONE"
}

Activation de la trousse SDK Duo Web v4

La trousse SDK Duo Web v2 (iFrame) est activée par défaut dans un domaine d'identité. Pour utiliser la trousse SDK Duo Web v4, vous devez l'activer.

Utilisez les instructions suivantes pour activer la trousse SDK Duo Web v4.

  1. À l'aide de cURL, GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings

    Exemple de réponse

    Vous devriez voir les paramètres suivants de Duo Web SDK v2.

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
          "integrationKey": "<integration-key>",
          "secretKey": "<secret-key>",
          "apiHostname": "api-example.duosecurity.com",
          "userMappingAttribute": "userName"
    }
  2. Sauvegardez votre instance si un repositionnement est requis.
  3. Mettez à jour les données utiles de l'étape 1 en ajoutant enableWebSDKv4 et duoSecurityAuthzRedirectUrl dans la section urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.

    • enableWebSDKv4 : La valeur par défaut est false. Si enableWebSDKv4 est faux, la trousse SDK Duo Web v2 est utilisée.
    • duoSecurityAuthzRedirectUrl : La valeur par défaut est vide. Ajoutez l'URL de votre organisation ici. L'URL de redirection est utilisée pour lancer l'authentification de sécurité Duo, qui reçoit une réponse du serveur de sécurité Duo avec duoSecurityAuthzState et duoSecurityAuthzCode. Cette URL peut être remplacée à l'aide de l'interface utilisateur personnalisée. L'interface utilisateur personnalisée doit utiliser ce point d'extrémité pour recevoir le code et le paramètre du serveur de sécurité Duo.

    Notez que l'attribut suivant passe de v2 à v4.

    • client_id (integrationKey dans v2)
    • clientSecret (secretKey dans v2)
    • apiHostName (aucune modification par rapport à v2)
    • userMappingAttribute (aucune modification par rapport à v2)

    Exemple de demande

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
           "integrationKey": "<integration-key>",
           "secretKey": ""<secret-key>"",
           "apiHostname": "api-6ff7f509.duosecurity.com",
           "userMappingAttribute": "primaryEmail",
           "enableWebSDKv4": true,
           "duoSecurityAuthzRedirectUrl": "https://abc.co/a/c"
       }
    }
  4. À l'aide de cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings à l'aide des données utiles de l'étape 3.

Authentification du nom d'utilisateur et du mot de passe avec la sécurité Duo en tant que facteur d'authentification

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour authentifier les utilisateurs et effectuer l'inscription et l'authentification multifacteur avec la trousse SDK Duo Web v2 ou la trousse SDK Duo Web v4.

Note

  • Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
  • Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'authentification unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Les exemples de jeu suivants sont inclus dans ce cas d'utilisation :

Inscrire un nouvel utilisateur avec Duo Security à l'aide de la trousse SDK Web v2

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour inscrire un nouvel utilisateur et un appareil associé à la trousse SDK Duo Web v2.

Note

  • Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
  • Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'authentification unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Pour le cas d'utilisation, procédez comme suit. Chaque étape contient des exemples de demande et de réponse :

Note

Ces étapes supposent que l'authentification multifacteur est activée et qu'une politique d'authentification est créée pour l'authentification multifacteur. Voir Configurer les paramètres d'authentification multifacteur.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Dans cet exemple de cas d'utilisation, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Étape 3 : Lancer la demande d'inscription à la sécurité Duo

Cette étape lance l'inscription à la sécurité Duo. Le client doit inclure les attributs suivants :

  • op : Indique au serveur le type d'opération souhaité par le client
  • authFactor : Définit le facteur d'authentification auquel l'utilisateur veut s'inscrire
  • requestState : Réception dans la réponse de l'étape 2

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
    "op": "enrollment",
    "authFactor": "DUO_SECURITY",
    "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la demande au format JSON :

{
   "status": "success",
   "ecId": "4uy3^1k0000000000",
   "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
          |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjMwNTM=
          |5853cc561ded98c72426b633a1b1e719401e2345:APP
          |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjYzNTM=
          |37f594101a380ff3902e0a2cb545346ed196bbca",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
   },
   "nextOp": [
       "credSubmit",
       "createToken",
       "createSession",
       "enrollment"
   ],
   "mfaSettings": {
       "enrollmentRequired": false
   },
   "scenario": "ENROLLMENT",
   "requestState": "{{requestState}}"
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit est envoyé à l'étape suivante.

Étape 4 : Lancer l'authentification de sécurité Duo

Utilisez la trousse SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame utilisée pour l'authentification secondaire.

Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité Duo.

function duo(msg, duoSecurityCallback) {
    Duo.init({iframe: "duo_iframe",
            host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
            sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
            submit_callback: duoSecurityCallback,
            post_argument: "resp"
    });
}

Après avoir terminé le processus d'authentification Duo, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.

var duoSecurityCallback = function(details, credentials) {
       var credentials = {};
       credentials.duoSecurityResponse = details.firstElementChild.value;
       operation = "credSubmit";
       initiateAuth(credentials); 
}

Ensuite, après avoir reçu la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Étape 5 : Soumettre les données d'identification du facteur

Cette étape soumet les données d'identification de facteur dans requestState qui ont été reçues dans la réponse de l'étape 3. Notez que les données utiles de la demande ne contiennent pas l'attribut authFactor, car requestState les contient. Le client doit inclure les attributs suivants :

  • op : Indique au serveur le type d'opération souhaité par le client
  • requestState : Réception dans la réponse de l'étape 3

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON pour soumettre les données d'identification du facteur :

{  
   "op":"credSubmit",
   "credentials": {  
       "duoSecurityResponse": "AUTH
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
      |f2d0df2a189219a8e85db190ac66fab33be996c3:APP
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
      |a3b7c901e845ebd80451ab670473e983707a8459"
   },
   "requestState":"{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "displayName": "{{username}}'s Duo Security Account",
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, createToken est envoyé à l'étape suivante.

Étape 6 : Créer le jeton d'authentification

Cette étape indique que le client est terminé et qu'une session doit être créée. Le serveur vérifie qu'aucune autre évaluation de facteur (selon ce qui est défini pour la stratégie) n'est nécessaire et répond avec le jeton ou refuse l'accès. Le client doit inclure les attributs suivants :
  • op : Indique au serveur le type d'opération souhaité par le client
  • requestState : Réception dans la réponse de l'étape 5

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{  
   "op":"createToken",
   "requestState":"{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{ "authnToken": "{{authnToken}}", "status": "success" }

Inscrire un nouvel utilisateur avec Duo Security à l'aide de la trousse SDK Web v4

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour inscrire un nouvel utilisateur et un appareil associé à la trousse SDK Duo Web v4.

Note

Si vous devez activer la trousse SDK Duo Web v4, voir Activation de la trousse SDK Duo Web v4.
Note

  • Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
  • Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'authentification unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Pour le cas d'utilisation, procédez comme suit. Chaque étape contient des exemples de demande et de réponse :

Note

Ces étapes supposent que l'authentification multifacteur est activée et qu'une politique d'authentification est créée pour l'authentification multifacteur. Voir Configurer les paramètres d'authentification multifacteur.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Dans cet exemple de cas d'utilisation, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Étape 3 : Lancer la demande d'inscription à la sécurité Duo

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
    "op": "enrollment",
    "authFactor": "DUO_SECURITY",
    "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la demande au format JSON.

{
   "status": "success",
   "ecId": "i2tul0R0000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
   ],
   "DUO_SECURITY": {
      "credentials": [
         "duoSecurityAuthzCode",
         "duoSecurityAuthzState"
      ],
      "authnDetails": {
         "duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
      }
   },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
   ],
   "scenario": "AUTHENTICATION",
   "requestState": "requestState",
   "trustedDeviceSettings": {
      "trustDurationInDays": 15
   }
}

Étape 4 : Lancer l'authentification de sécurité Duo

Lors de l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, le serveur Duo Security charge ensuite la page d'authentification secondaire où l'utilisateur effectue l'authentification secondaire. Après une authentification réussie, le serveur de sécurité Duo répond avec les paramètres d'état (duoSecurityAuthzState) et de code (duoSecurityAuthzCode). Ces paramètres doivent être soumis au domaine d'identité pour terminer l'authentification.

Pour obtenir les paramètres d'état et de code, procédez comme suit :

  1. Obtenez l'URL vers laquelle rediriger à partir de duoSecurityAuthzRequest.

    Par exemple :
    "duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"

    Il s'agit de l'URL de redirection pour duoSecurityAuthzRedirectURL.

  2. Effectuez la redirection 303 vers le serveur de sécurité Duo.

  3. Terminez le processus d'inscription et d'authentification de Duo Security.

    Le serveur de sécurité Duo redirige vers duoSecurityAuthzRedirectURL avec duoSecurityAuthzState et duoSecurityAuthzCode.

Étape 5 : Soumettre les données d'identification du facteur

Transmettez duoSecurityAuthzState et duoSecurityAuthzCode de la réponse au domaine d'identité pour terminer l'authentification.

Exemple de demande

L'exemple suivant montre le contenu de la demande au format JSON :

{
    "op": "credSubmit",
    "credentials":
   {
      "duoSecurityAuthzCode": "<duo-security-authz-code>",
      "duoSecurityAuthzState": "<duo-security-authz-state>"
   }
,
    "requestState": "requestState"}'

Exemple de réponse

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "displayName": "{{username}}'s Duo Security Account",
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Étape 6 : Créer le jeton d'authentification

Cette étape indique que le client est terminé et qu'une session doit être créée. Le serveur vérifie qu'aucune autre évaluation de facteur (selon ce qui est défini pour la stratégie) n'est nécessaire et répond avec le jeton ou refuse l'accès. Le client doit inclure les attributs suivants :
  • op : Indique au serveur le type d'opération souhaité par le client
  • requestState : Réception dans la réponse de l'étape 5

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{  
   "op":"createToken",
   "requestState":"{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{ "authnToken": "{{authnToken}}", "status": "success" }

Authentifier un compte d'utilisateur avec Duo Security à l'aide de la trousse SDK Web v2

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API d'authentification des domaines d'identité pour authentifier un compte d'utilisateur avec la trousse SDK Duo Web v2.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Note

Ces étapes supposent que l'authentification multifacteur est activée et qu'une politique d'authentification est créée pour l'authentification multifacteur. Voir Configurer les paramètres d'authentification multifacteur

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit est envoyé à l'étape suivante.

Étape 3 : Lancer l'authentification de sécurité Duo

Utilisez la trousse SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame utilisée pour l'authentification secondaire.

Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité Duo.

function duo(msg, duoSecurityCallback) {
    Duo.init({iframe: "duo_iframe",
            host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
            sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
            submit_callback: duoSecurityCallback,
            post_argument: "resp"
    });
}

Après avoir terminé le processus d'authentification Duo, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.

var duoSecurityCallback = function(details, credentials) {
       var credentials = {};
       credentials.duoSecurityResponse = details.firstElementChild.value;
       operation = "credSubmit";
       initiateAuth(credentials); 
}

Ensuite, après avoir reçu la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Étape 4 : Soumettre les données d'identification du facteur

Cette étape soumet les données d'identification de facteur dans requestState qui ont été reçues dans la réponse de l'étape 2. Notez que les données utiles de la demande ne contiennent pas l'attribut authFactor, car requestState les contient. Le client doit inclure les attributs suivants :

  • op : Indique au serveur le type d'opération souhaité par le client
  • requestState : Réception dans la réponse de l'étape 2

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON pour soumettre les données d'identification du facteur :

{  
   "op":"credSubmit",
   "credentials": {  
       "duoSecurityResponse": "AUTH
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
      |f2d0df2a189219a8e85db190ac66fab33be996c3:APP
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
      |a3b7c901e845ebd80451ab670473e983707a8459"
   },
   "requestState":"{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "authnToken": "{{authnToken}}",
    "status": "success",
    "ecId": "5MyZ41m0000000000"
}

Authentifier un compte d'utilisateur avec Duo Security à l'aide de la trousse SDK Web v4

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API d'authentification des domaines d'identité pour authentifier un compte d'utilisateur avec la trousse SDK Duo Web v4.

Note

Si vous devez activer la trousse SDK Duo Web v4, voir Activation de la trousse SDK Duo Web v4.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Note

Ces étapes supposent que l'authentification multifacteur est activée et qu'une politique d'authentification est créée pour l'authentification multifacteur. Voir Configurer les paramètres d'authentification multifacteur.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit est envoyé à l'étape suivante.

Étape 3 : Lancer l'authentification de sécurité Duo

Lors de l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, le serveur Duo Security charge ensuite la page d'authentification secondaire où l'utilisateur effectue l'authentification secondaire. Après une authentification réussie, le serveur de sécurité Duo répond avec les paramètres d'état (duoSecurityAuthzState) et de code (duoSecurityAuthzCode). Ces paramètres doivent être soumis au domaine d'identité pour terminer l'authentification.

Pour obtenir les paramètres d'état et de code, procédez comme suit :

  1. Obtenez l'URL vers laquelle rediriger à partir de duoSecurityAuthzRequest.

    Par exemple :
    "duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"

    Il s'agit de l'URL de redirection pour duoSecurityAuthzRedirectURL.

  2. Effectuez la redirection 303 vers le serveur de sécurité Duo.

  3. Terminez le processus d'inscription et d'authentification de Duo Security.

    Le serveur de sécurité Duo redirige vers duoSecurityAuthzRedirectURL avec duoSecurityAuthzState et duoSecurityAuthzCode.

Étape 4 : Soumettre les données d'identification du facteur

Transmettez duoSecurityAuthzState et duoSecurityAuthzCode de la réponse au domaine d'identité pour terminer l'authentification.

Exemple de demande

L'exemple suivant montre le contenu de la demande au format JSON :

{
    "op": "credSubmit",
    "credentials":
   {
      "duoSecurityAuthzCode": "<duo-security-authz-code>",
      "duoSecurityAuthzState": "<duo-security-authz-state>"
   }
,
    "requestState": "requestState"}'

Exemple de réponse

{
    "authnToken": "{{authnToken}}",
    "status": "success",
    "ecId": "5MyZ41m0000000000"
}

Authentifier un utilisateur avec sécurité Duo lorsqu'il est utilisé comme facteur de sauvegarde

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour authentifier un compte d'utilisateur avec Duo Security même lorsqu'il est configuré en tant que facteur de sauvegarde.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, getBackupFactors est envoyé à l'étape suivante.

Étape 3 : Obtenir la liste des facteurs de sauvegarde

Cette étape vous permet d'obtenir la liste des facteurs de sauvegarde.

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
    "op": "getBackupFactors",
    "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "5MyZ41p0000000000",
    "nextAuthFactors": [
        "EMAIL",
        "BYPASSCODE",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY"
    ],
    "EMAIL": {
        "credentials": [
            "preferred",
            "deviceId"
        ],
        "enrolledDevices": [
            {
                "deviceId": "790ed820aee048a78de17ebe1ebddb19",
                "displayName": "ashXXXXX@oracle.com"
            }
        ]
    },
    "BYPASSCODE": {
        "credentials": [
            "bypassCode"
        ]
    },
    "SECURITY_QUESTIONS": {
        "credentials": [
            "questionId",
            "answer"
        ],
        "questions": [
            {
                "questionId": "FirstCar",
                "text": "What's the model of your first car?"
            }
        ],
        "preferred": true
    },
    "DUO_SECURITY": {
        "enrolledDevices": [
            {
                "deviceId": "3053eed6249a4dd4835c51bf873c5f85",
                "displayName": "jarvis's Duo Security Account"
            }
        ]
    },
    "nextOp": [
        "credSubmit",
        "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
        "trustDurationInDays": 15
    }
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 4 : Sélectionnez Duo Security dans la liste des facteurs de sauvegarde

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
    "op": "credSubmit",
    "authFactor": "DUO_SECURITY",
    "credentials": {
        "deviceId": "3053eed6249a4dd4835c51bf873c5f85"
    },
    "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
	"status": "success",
	"ecId": "5MyZ41q0000000000",
	"DUO_SECURITY": {
	"credentials": [
		 "duoSecurityResponse"
	],
	"authnDetails": {
		"duoSecurityChallenge": "TX
			 |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ1NDg=
			 |230d8328f53ec537ecd033fbb175fbce65930c3e:APP
			 |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
			 |af94d927d3e027141177e8f88baa19f6427502ee",
		   "duoSecurityHost": "api-example.duosecurity.com"
		}
	},
	"nextOp": [
		"credSubmit",
	       "getBackupFactors"
	],
	"scenario": "AUTHENTICATION",
	"requestState": "{{requestState}}",
	"trustedDeviceSettings": {
		"trustDurationInDays": 15
	}
}

Définir la sécurité Duo comme facteur privilégié

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour définir Duo Security en tant que facteur privilégié pour l'authentification.

Vous pouvez régler l'indicateur preferred à true pour que la sécurité Duo devienne un facteur privilégié, si un utilisateur a déjà un autre facteur que la sécurité Duo comme facteur privilégié.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
   "status": "success",
   "ecId": "g5CAF1i1000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
    ],
    "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
            |73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
            |11f57d2ad044abee78d3290fdff69af7c3d22d71",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
    },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
      "trustDurationInDays": 15
    }
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit est envoyé à l'étape suivante.

Étape 3 : Lancer l'authentification de sécurité Duo

Utilisez la trousse SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame utilisée pour l'authentification secondaire.

Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité Duo.

function duo(msg, duoSecurityCallback) {
    Duo.init({iframe: "duo_iframe",
            host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
            sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
            submit_callback: duoSecurityCallback,
            post_argument: "resp"
    });
}

Après avoir terminé le processus d'authentification Duo, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.

var duoSecurityCallback = function(details, credentials) {
       var credentials = {};
       credentials.duoSecurityResponse = details.firstElementChild.value;
       operation = "credSubmit";
       initiateAuth(credentials); 
}

Ensuite, après avoir reçu la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Étape 4 : Activer la sécurité Duo comme facteur privilégié

Cette étape permet à Duo Security d'être le facteur privilégié. Pour cette étape, le client doit inclure les attributs suivants :
  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
  "op": "credSubmit",
  "credentials": {
    "duoSecurityResponse": "AUTH
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQzMzg=
      |4a40cc9c79d4a65b48d0f9b871d7a4e83481b3ca:APP
      |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
      |af94d927d3e027141177e8f88baa19f6427502ee",
    "preferred": true
 },
 "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "authnToken": "{{authnToken}}",
    "status": "success",
    "ecId": "5MyZ41r0000000000"
}

Prise en charge d'un appareil approuvé lors de l'utilisation de Duo comme facteur d'authentification

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour prendre en charge un appareil approuvé lors de l'utilisation de Duo comme facteur d'authentification.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Étape 1 : Démarrer le flux d'authentification

Obtenez la valeur requestState initiale pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant présente la demande au format cURL :

   curl  -X GET
   -H "Content-Type: application/json" 
   -H "Authorization: Bearer {{access_token_value}}"
   https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Note

appName est facultatif. appName est le nom de l'application à laquelle le client veut accéder. Si une valeur appName est fournie, les politiques d'authentification propres à l'application sont traitées et le client est mis au défi pour les facteurs requis en fonction de cette politique.

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "status": "success",
    "ecId": "ecId",
 "nextOp": [
        "credSubmit"
    ],
    "nextAuthFactors": [
        "USERNAME_PASSWORD"
    ],
    "USERNAME_PASSWORD": {
        "credentials": [
            "username",
            "example-password"
        ]
    },
    "requestState": "{{requestState}}"
}

Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Étape 2 : Soumettre les données d'identification de l'utilisateur

Soumettez les données d'identification de l'utilisateur comme premier facteur, à savoir le nom d'utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :

  • Nom d'utilisateur et mot de passe credentials:

  • requestState: reçu dans la réponse de l'étape 1

  • op: indique au serveur le type d'opération souhaité par le client

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
      "username": "{{username}}",
      "password": "{{password}}"
   },
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
   "status": "success",
   "ecId": "g5CAF1i1000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
    ],
    "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
            |73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
            |11f57d2ad044abee78d3290fdff69af7c3d22d71",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
    },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
      "trustDurationInDays": 15
    }
}

Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'utilisation, credSubmit est envoyé à l'étape suivante.

Étape 3 : Lancer l'authentification de sécurité Duo

Utilisez la trousse SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame utilisée pour l'authentification secondaire.

Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité Duo.

function duo(msg, duoSecurityCallback) {
    Duo.init({iframe: "duo_iframe",
            host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
            sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
            submit_callback: duoSecurityCallback,
            post_argument: "resp"
    });
}

Après avoir terminé le processus d'authentification Duo, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.

var duoSecurityCallback = function(details, credentials) {
       var credentials = {};
       credentials.duoSecurityResponse = details.firstElementChild.value;
       operation = "credSubmit";
       initiateAuth(credentials); 
}

Ensuite, après avoir reçu la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Étape 4 : Activer un appareil comme approuvé

Cette étape permet à un périphérique d'être approuvé. Une fois l'appareil approuvé, l'authentification multifacteur ne sera pas contestée même si Duo Security est inscrit.

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
   "op": "credSubmit",
   "credentials": {
       "duoSecurityResponse": "AUTH
         |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ2MDY=
         |ba16e2eb734e00d9ebe6f8129ce32669437052e9:APP
         |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjgwNjc=
         |ba4f415559ff2c30b23a912a18ee5f717a398563"
   },
   "trustedDevice": true,
   "trustedDeviceDisplayName": "Postman on Windows",
   "requestState": "{{requestState}}"
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "authnToken": "{{authnToken}}",
    "trustToken": "{{trustToken}}",
    "status": "success",
    "ecId": "5MyZ41u0000000000"
}

Inscription à l'authentification multifacteur avec sécurité Duo à l'aide du libre-service

Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour l'inscription en libre-service à l'authentification multifacteur à l'aide de Duo Security.

Téléchargez la collection d'exemples de cas d'utilisation pour l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.

Comme étape préalable, vous devez obtenir un jeton ME avant de suivre ces étapes. Voir Génération d'un jeton d'accès à l'aide de l'API d'authentification pour plus d'informations sur l'obtention d'un jeton ME.

Note

Ces étapes supposent que les facteurs pertinents de l'authentification multifacteur sont activés à l'aide de Configurer les paramètres d'authentification multifacteur.

Step1 : Inscrire un utilisateur avec un facteur Duo

Cette étape lance l'inscription Duo Security dans une demande POST au point d'extrémité /admin/v1/MyAuthenticationFactorEnroller. Le client doit inclure l'attribut suivant :
  • value : Définit l'ID utilisateur. Vous pouvez appeler GET à {{HOST}}/admin/v1/Me pour obtenir la valeur "id".

Exemple de demande

L'exemple suivant montre le contenu du corps de la demande POST au format JSON :

{
   "authnFactors":["THIRDPARTY"],
   "thirdPartyFactor": {
       "thirdPartyVendorName" : "DUO_SECURITY",
       "thirdPartyFactorType" : "None"
   },
   "user": {
      "value" : "012832e2e63d4bfda5bc512f2b52ccbe"
    },
   "schemas": [
       "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
   ]
}

Exemple de réponse

L'exemple suivant montre le contenu du corps de la réponse au format JSON :

{
    "authnFactors": [
        "THIRDPARTY"
    ],
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "user": {
        "value": "6852e4e2bc864b3b912d7bd48f9f4879",
        "$ref": "https://<domainURL>admin/v1/Users/6852e4e2bc864b3b912d7bd48f9f4879"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorEnroller",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorEnroller"
    },
    "displayName": "test's Phone",
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b"
}

Dans la réponse, deviceId et requestId doivent être transmis à l'étape suivante.

Étape 2 : Lancer l'authentification Duo pour l'utilisateur

Cette étape lance l'authentification côté tiers en soumettant une demande POST au point d'extrémité /admin/v1/MyAuthenticationFactorInitiator. Le client doit inclure les attributs suivants :

  • requestId: reçu dans la réponse de l'étape 1
  • deviceId: reçu dans la réponse de l'étape 1
  • Nom d'utilisateur userName: de l'utilisateur

Exemple de demande

L'exemple suivant montre le contenu du corps de la demande POST au format JSON :

{
    "requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
    "deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ]
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorInitiator",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorInitiator"
    },
    "additionalAttributes": [
        {
            "name": "duoHost",
            "value": "api-0095dc4a.duosecurity.com"
        },
        {
            "name": "duoChallenge",
            "value": "TX
               |Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyMDkz==
               |8a0b6f0472b1c03357e9d6b3348d0a341c96e6a0:APP
               |Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ 4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyNDIzNA==
               |5d45c215e6e5af7d866df480087d825aa1cf4279"
        }
    ]
}

Dans la réponse, deviceId et requestId doivent être transmis à l'étape suivante.

Étape 3 : Valider le facteur de duo pour le scénario d'adhésion

Cette étape appelle l'API de facteur de tierce partie avec les données d'identification collectées pour valider l'inscription d'un utilisateur dans une demande POST au point d'extrémité /admin/v1/MyAuthenticationFactorValidator.

Le client doit inclure les attributs suivants :

  • requestId: reçu dans la réponse de l'étape 2
  • deviceId: reçu dans la réponse de l'étape 2

Exemple de demande

L'exemple suivant montre le contenu de la demande POST au format JSON :

{
    "requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
    "deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "scenario": "ENROLLMENT",
    "username": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
    ],
    "additionalAttributes": [
        {
            "name": "duoResponse",
            "value": "AUTH|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMwNDc2|9439adbea1b90a90c9169f366cc028aabde8ac51:APP|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMzODYx|94bcc9a0c4ab6da617827432d021171d3b393fd3"
        }
    ]
}

Exemple de réponse

L'exemple suivant montre le contenu de la réponse au format JSON :

{
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "scenario": "ENROLLMENT",
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorValidator",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorValidator"
    },
    "status": "SUCCESS",
    "displayName": "test's Phone",
    "mfaStatus": "ENROLLED",
    "mfaPreferredDevice": "0d37a1334bdf4c9ca80474dcadba8d10",
    "mfaPreferredAuthenticationFactor": "THIRDPARTY",
    "mfaPreferredThirdPartyFactorType": "None",
    "securityQuestionsPresent": false,
    "devicesCount": 1,
    "emailFactorEnrolled": false
}

Dans la réponse, l'attribut mfaStatus:"ENROLLED" indique que l'utilisateur s'est inscrit à l'authentification multifacteur. L'attribut mfaPreferredAuthenticationFactor indique le jeu de facteurs comme méthode privilégiée. Dans ce cas, il s'agit de THIRDPARTY.