Utiliser Duo Security 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, reportez-vous à Utilisation de cURL.

Commande cURL

Remarque

Dans cet exemple, la commande 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é. Pour connaître la structure d'URL appropriée à utiliser, reportez-vous à Envoyer des demandes.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Corps de demande

L'exemple suivant illustre le corps de la demande au format JSON :
Exemple de corps de requête
{
  "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 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é par défaut dans un domaine d'identité. Pour utiliser Duo Web SDK v4, vous devez l'activer.

Utilisez les instructions suivantes pour activer Duo Web SDK v4.

  1. En utilisant cURL, GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings

    Exemple de réponse

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

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

    • enableWebSDKv4 : la valeur par défaut est false. Si enableWebSDKv4 a la valeur False, Duo Web SDK v2 est utilisé.
    • duoSecurityAuthzRedirectUrl : la valeur par défaut est vide. Ajoutez l'URL de votre organisation ici. L'URL de réacheminement est utilisée pour lancer l'authentification de sécurité Duo, qui reçoit une réponse du serveur de sécurité Duo avec les éléments 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.

    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 utilise la charge utile de l'étape 3.

Authentification du nom utilisateur et du mot de passe avec Duo Security en tant que facteur d'authentification

Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour authentifier les utilisateurs et effectuer une inscription et une authentification multifacteurs 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 d'utilisation de 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 jeux suivants sont inclus dans ce cas d'utilisation :

Inscrire un nouvel utilisateur à Duo Security à l'aide du kit SDK Web v2

Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour inscrire un nouvel utilisateur et un appareil 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 d'utilisation de 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.

Suivez les étapes ci-dessous pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :

Remarque

Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Etape 3 : Lancer une demande d'inscription à la sécurité Duo

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

Etape 4 : Lancer l'authentification de sécurité Duo

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est 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 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"
    });
}

Une fois le processus d'authentification Duo terminé, 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, lors de 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 du facteur

Cette étape soumet les informations d'identification de facteur dans le fichier requestState qui ont été reçues dans la réponse d'é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 montre 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 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'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 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 à Duo Security à l'aide du kit SDK Web v4

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

Remarque

Si vous devez activer Duo Web SDK v4, reportez-vous à Activation de 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 d'utilisation de 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.

Suivez les étapes ci-dessous pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :

Remarque

Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.

Etape 3 : Lancer une 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
   }
}

Etape 4 : Lancer l'authentification de sécurité Duo

Pendant l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, puis le serveur Duo Security charge 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. Effectuez 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 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}}"
}

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 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 utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v2

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

Conseil

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

Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification de sécurité Duo

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est 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 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"
    });
}

Une fois le processus d'authentification Duo terminé, 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, lors de 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 du facteur

Cette étape soumet les informations d'identification de facteur dans le fichier requestState qui ont été reçues dans la réponse d'é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 montre 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 montre le contenu de la réponse au format JSON :

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

Authentifier un compte utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v4

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

Remarque

Si vous devez activer Duo Web SDK v4, reportez-vous à Activation de Duo Web SDK v4.
Conseil

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

Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification de sécurité Duo

Pendant l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, puis le serveur Duo Security charge 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. Effectuez 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 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"
}

Authentification d'un utilisateur avec Duo Security lorsqu'il est utilisé comme facteur de sauvegarde

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

Conseil

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

Etape 1 : lancement du flux d'authentification

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

Exemple de demande

L'exemple suivant montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'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 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'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.

Etape 4 : Sélectionnez 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 :
  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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 Duo Security comme facteur préféré

Ce cas d'utilisation fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour définir Duo Security comme facteur préféré pour l'authentification.

Vous pouvez définir l'indicateur preferred sur true pour définir Duo Security comme 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 d'utilisation de 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.

Etape 1 : lancement du flux d'authentification

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

Exemple de demande

L'exemple suivant montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification de sécurité Duo

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est 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 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"
    });
}

Une fois le processus d'authentification Duo terminé, 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, lors de 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 la sécurité Duo en tant que facteur préféré

Cette étape permet d'activer Duo Security comme facteur préféré. Pour cette étape, le client doit inclure les attributs suivants :
  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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 des périphériques sécurisés lors de l'utilisation de Duo en tant que facteur d'authentification

Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour prendre en charge les périphériques sécurisés lors de l'utilisation de Duo comme facteur d'authentification.

Conseil

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

Etape 1 : lancement du flux d'authentification

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

Exemple de demande

L'exemple suivant montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.

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

Etape 2 : soumission des 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 :

  • credentials: nom d'utilisateur et mots de passe

  • requestState: reçu dans la réponse d'é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'emploi, credSubmit est envoyé à l'étape suivante.

Etape 3 : Lancer l'authentification de sécurité Duo

Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est 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 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"
    });
}

Une fois le processus d'authentification Duo terminé, 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, lors de 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 de confiance

Cette étape active un périphérique de confiance. Une fois l'appareil sécurisé, l'authentification à plusieurs facteurs n'est plus 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 à plusieurs facteurs avec Duo Security à l'aide du libre-service

Ce cas d'emploi fournit un exemple détaillé de l'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 d'utilisation de 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. Pour plus d'informations sur l'obtention d'un jeton ME, reportez-vous à Génération de 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 Configurer les paramètres d'authentification à plusieurs facteurs.

Step1 : inscrire un utilisateur au facteur Duo

Cette étape lance l'inscription Duo Security à une demande POST adressée à 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 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 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 d'étape 1
  • deviceId: reçu dans la réponse d'étape 1
  • Nom 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.

Etape 3 : Valider le facteur de 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 à une demande POST vers l'adresse /admin/v1/MyAuthenticationFactorValidator.

Le client doit inclure les attributs suivants :

  • requestId: reçu dans la réponse d'étape 2
  • deviceId: reçu dans la réponse d'é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 à plusieurs facteurs. L'attribut mfaPreferredAuthenticationFactor indique l'ensemble de facteurs comme méthode préférée. Dans ce cas, il s'agit de THIRDPARTY.