Utilisation de Duo Security avec des domaines d'identité

Mise à jour des paramètres du facteur d'authentification avec les paramètres Duo Security

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

Commande cURL

Remarque

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é. Reportez-vous à Envoyer des demandes pour connaître 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 la demande

L'exemple suivant illustre un corps de demande au format JSON :
Exemple de corps de 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 illustre 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 du kit SDK Web Duo v4

Le kit SDK Web Duo v2 (iFrame) est activé dans un domaine d'identité par défaut. Pour utiliser le kit SDK Web Duo v4, vous devez l'activer.

Utilisez les instructions suivantes pour activer le kit SDK Web Duo v4.

  1. Utilisation de cURL, GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings

    Exemple de réponse

    Vous devez voir les paramètres v2 suivants du kit SDK Web Duo.

    "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 l'instance au cas où une annulation (rollback) serait nécessaire.
  3. Mettez à jour la charge utile à partir de l'étape 1 en ajoutant enableWebSDKv4 et duoSecurityAuthzRedirectUrl sous la section urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.

    • enableWebSDKv4 : valeur par défaut : false. Si enableWebSDKv4 a la valeur False, le kit SDK Web Duo v2 est utilisé.
    • 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 cette adresse pour recevoir le code et le paramètre du serveur Duo Security.

    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. A l'aide de cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings à l'aide de la charge utile de l'étape 3.

Authentification du nom d'utilisateur et du mot de passe avec Duo Security 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 authentifier les utilisateurs et effectuer l'inscription et l'authentification à plusieurs facteurs avec Duo Web SDK v2 ou Duo Web SDK v4.

Remarque

  • 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'accès avec connexion unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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 d'ensemble suivants sont inclus dans ce cas d'emploi :

Inscription d'un nouvel utilisateur à Duo Security à l'aide du kit 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 périphérique associé au kit SDK Web Duo v2.

Remarque

  • 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'accès avec connexion unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.

Utilisez les étapes suivantes pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :

Remarque

Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Etape 3 : Lancer la demande d'inscription Duo Security

Cette étape lance l'inscription à Duo Security. 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 souhaite s'inscrire.
  • requestState : reçu dans la réponse de l'étape 2

Exemple de demande

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

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

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 4 : Lancer l'authentification Duo Security

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo propose une bibliothèque JavaScript qui interagit avec iFrame utilisé 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 Duo Security et charger iFrame pour établir une connexion avec le serveur Duo Security.

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, à la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Etape 5 : Soumettre les informations d'identification de facteur

Cette étape soumet les informations d'identification de facteur dans requestState qui ont été reçues dans la réponse de l'étape 3. La charge utile de demande ne contient pas l'attribut authFactor car requestState le contient. Le client doit inclure les attributs suivants :

  • op : indique au serveur le type d'opération souhaité par le client.
  • requestState : reçu dans la réponse de l'étape 3

Exemple de demande

L'exemple suivant présente le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :

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

Exemple de réponse

L'exemple suivant illustre 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'emploi, createToken est envoyé à l'étape suivante.

Etape 6 : création du 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 : reçu dans la réponse de l'étape 5

Exemple de demande

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

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

Exemple de réponse

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

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

Inscription d'un nouvel utilisateur à Duo Security à l'aide du kit 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 périphérique associé au kit SDK Web Duo v4.

Remarque

Si vous devez activer le kit SDK Web Duo v4, reportez-vous à Activation du kit SDK Web Duo v4.
Remarque

  • 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'accès avec connexion unique.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.

Utilisez les étapes suivantes pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :

Remarque

Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Etape 3 : Lancer la demande d'inscription Duo Security

Exemple de demande

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

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

Exemple de réponse

L'exemple suivant illustre 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
   }
}

Etape 4 : Lancer l'authentification Duo Security

Pendant 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. Une fois l'authentification réussie, le serveur Duo Security 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 réacheminement pour duoSecurityAuthzRedirectURL.

  2. Effectuez la redirection 303 vers le serveur Duo Security.

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

    Le serveur Duo Security redirige vers duoSecurityAuthzRedirectURL avec duoSecurityAuthzState et duoSecurityAuthzCode.

Etape 5 : Soumettre les informations d'identification de facteur

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

Exemple de demande

L'exemple suivant illustre 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}}"
}

Etape 6 : création du 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 : reçu dans la réponse de l'étape 5

Exemple de demande

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

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

Exemple de réponse

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

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

Authentification d'un compte utilisateur avec Duo Security à l'aide du kit 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 utilisateur avec le kit SDK Web Duo v2.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.
Remarque

Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification Duo Security

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo propose une bibliothèque JavaScript qui interagit avec iFrame utilisé 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 Duo Security et charger iFrame pour établir une connexion avec le serveur Duo Security.

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, à la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Etape 4 : Soumettre les informations d'identification de facteur

Cette étape soumet les informations d'identification de facteur dans requestState qui ont été reçues dans la réponse de l'étape 2. La charge utile de demande ne contient pas l'attribut authFactor car requestState le contient. Le client doit inclure les attributs suivants :

  • op : indique au serveur le type d'opération souhaité par le client.
  • requestState : reçu dans la réponse de l'étape 2

Exemple de demande

L'exemple suivant présente le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :

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

Exemple de réponse

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

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

Authentification d'un compte utilisateur avec Duo Security à l'aide du kit 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 utilisateur avec le kit SDK Web Duo v4.

Remarque

Si vous devez activer le kit SDK Web Duo v4, reportez-vous à Activation du kit SDK Web Duo v4.
Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.
Remarque

Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification Duo Security

Pendant 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. Une fois l'authentification réussie, le serveur Duo Security 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 réacheminement pour duoSecurityAuthzRedirectURL.

  2. Effectuez la redirection 303 vers le serveur Duo Security.

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

    Le serveur Duo Security redirige vers duoSecurityAuthzRedirectURL avec duoSecurityAuthzState et duoSecurityAuthzCode.

Etape 4 : Soumettre les informations d'identification de facteur

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

Exemple de demande

L'exemple suivant illustre 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"
}

Authentification d'un utilisateur avec Duo Security 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 utilisateur avec Duo Security, même s'il est configuré en tant que facteur de sauvegarde.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, getBackupFactors est envoyé à l'étape suivante.

Etape 3 : Obtention de la liste des facteurs de sauvegarde

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

Exemple de demande

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

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

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 4 : Sélectionner Duo Security dans la liste des facteurs de sauvegarde

Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
  • Nom 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 illustre 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 illustre 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 Duo Security comme facteur préféré

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 comme facteur d'authentification préféré.

Vous pouvez définir l'indicateur preferred sur true pour faire de Duo Security un facteur préféré, si un utilisateur a déjà un autre facteur que Duo Security comme facteur préféré.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification Duo Security

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo propose une bibliothèque JavaScript qui interagit avec iFrame utilisé 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 Duo Security et charger iFrame pour établir une connexion avec le serveur Duo Security.

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, à la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Etape 4 : Activer Duo Security en tant que facteur préféré

Cette étape active Duo Security en tant que facteur préféré. Pour cette étape, le client doit inclure les attributs suivants :
  • Nom 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 illustre 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 illustre le contenu de la réponse au format JSON :

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

Prise en charge d'un périphérique sécurisé 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 sécurisé lors de l'utilisation de Duo comme facteur d'authentification.

Conseil

Téléchargez la collection d'exemples de cas d'utilisation d'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.

Etape 1 : lancement du flux d'authentification

Obtenez le requestState initial pour démarrer le flux d'authentification.

Exemple de demande

L'exemple suivant illustre 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}}
Remarque

appName est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si un appName est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.

Exemple de réponse

L'exemple suivant illustre 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'emploi, credSubmit doit être envoyé à l'étape suivante. Le fichier requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 2 : Soumettre les informations d'identification de l'utilisateur

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

  • Nom 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 illustre 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 illustre 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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification Duo Security

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo propose une bibliothèque JavaScript qui interagit avec iFrame utilisé 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 Duo Security et charger iFrame pour établir une connexion avec le serveur Duo Security.

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, à la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.

Etape 4 : activation d'un périphérique en tant que périphérique de confiance

Cette étape active un périphérique de confiance. Une fois que l'appareil est sécurisé, l'authentification à plusieurs facteurs ne sera pas contestée même si Duo Security est inscrit.

Exemple de demande

L'exemple suivant illustre 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 illustre le contenu de la réponse au format JSON :

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

Inscription à l'authentification à plusieurs facteurs avec Duo Security en 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 (MFA) à l'aide de Duo Security.

Téléchargez la collection d'exemples de cas d'utilisation d'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.

L'étape préalable consiste à obtenir un jeton ME avant de suivre ces étapes. Pour plus d'informations sur l'obtention d'un jeton ME, reportez-vous à Génération d'un jeton d'accès à l'aide de l'API d'authentification.

Remarque

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

Step1 : inscription d'un utilisateur avec Duo Factor

Cette étape lance l'inscription de Duo Security dans une demande POST à l'adresse /admin/v1/MyAuthenticationFactorEnroller. Le client doit inclure l'attribut suivant :
  • value : définit l'ID utilisateur. Vous pouvez effectuer un appel GET vers {{HOST}}/admin/v1/Me pour obtenir la valeur "id".

Exemple de demande

L'exemple suivant illustre 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 illustre 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.

Etape 2 : Lancer l'authentification duo pour l'utilisateur

Cette étape lance l'authentification côté tiers en soumettant une demande POST à l'adresse /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 utilisateur userName: de l'utilisateur

Exemple de demande

L'exemple suivant illustre 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 illustre 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.

Etape 3 : Valider le facteur duo pour le scénario d'inscription

Cette étape appelle l'API de facteur tiers avec les informations d'identification collectées pour valider l'inscription d'un utilisateur dans une demande POST à l'adresse /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 illustre 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 illustre 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 à plusieurs facteurs. L'attribut mfaPreferredAuthenticationFactor indique le jeu de facteurs comme méthode préférée. Dans ce cas, il s'agit de THIRDPARTY.