Uso de Duo Security con Dominios de Identidad

Actualización de la configuración del factor de autenticación con la configuración de Duo Security

En el siguiente ejemplo, se muestra cómo actualizar la configuración de autenticación multifactor para un inquilino mediante el envío de una solicitud PUT en el recurso REST mediante cURL. Para obtener más información sobre cURL, consulte Uso de cURL.

comando cURL

Nota

El comando de este ejemplo utiliza la estructura de URL https://<domainURL>/resource-path, donde <domainURL> representa la URL del servicio de identidad y la ruta de acceso del recurso representa la API del servicio de identidad. Consulte Enviar solicitudes para obtener la estructura de URL adecuada que se debe utilizar.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Cuerpo de Solicitud

A continuación se muestra un ejemplo de cuerpo de solicitud con formato JSON:
Cuerpo de solicitud de ejemplo
{
  "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"
}

Cuerpo de Respuesta

En el siguiente ejemplo se muestra el contenido del cuerpo de respuesta con formato JSON:

Cuerpo de respuesta de ejemplo
{
    "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"
}

Activación del SDK de Duo Web v4

El SDK de Duo Web v2 (iFrame) está activado por defecto en un dominio de identidad. Para utilizar Duo Web SDK v4, debe activarlo.

Utilice las siguientes instrucciones para activar el SDK de Duo Web v4.

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

    Ejemplo de respuesta

    Debe ver la siguiente configuración de Duo Web SDK v2.

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
          "integrationKey": "<integration-key>",
          "secretKey": "<secret-key>",
          "apiHostname": "api-example.duosecurity.com",
          "userMappingAttribute": "userName"
    }
  2. Realice una copia de seguridad de la instancia en caso de que sea necesario realizar un rollback.
  3. Actualice la carga útil del paso 1 agregando enableWebSDKv4 y duoSecurityAuthzRedirectUrl en la sección urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.

    • enableWebSDKv4: el valor por defecto es false. Si enableWebSDKv4 es false, se utiliza el SDK de Duo Web v2.
    • duoSecurityAuthzRedirectUrl: el valor por defecto está en blanco. Agregue la URL de su organización aquí. La URL de redirección se utiliza para iniciar la autenticación de seguridad de Duo, que recibe una respuesta del servidor de seguridad de Duo con duoSecurityAuthzState y duoSecurityAuthzCode. Esta URL se puede sustituir mediante la interfaz de usuario personalizada. La interfaz de usuario personalizada debe utilizar este punto final para recibir el código y el parámetro del servidor de Duo Security.

    Tenga en cuenta que el siguiente atributo cambia de v2 a v4.

    • client_id (integrationKey en v2)
    • clientSecret (secretKey en v2)
    • apiHostName (sin cambio de v2)
    • userMappingAttribute (sin cambio de v2)

    Ejemplo de solicitud

    "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. Mediante cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings mediante la carga útil del paso 3.

Autenticación de Nombre de Usuario y Contraseña con Duo Security como Factor de Autenticación

Este caso de uso proporciona un ejemplo paso a paso del uso de la API de REST de dominios de identidad para autenticar usuarios y realizar una inscripción y autenticación multifactor con Duo Web SDK v2 o Duo Web SDK v4.

Nota

  • Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
  • Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

En este caso de uso se incluyen los siguientes conjuntos de ejemplo:

Inscribir a un nuevo usuario con Duo Security mediante Web SDK v2

Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de los dominios de identidad para inscribir a un nuevo usuario y un dispositivo asociado con el SDK web de Duo v2.

Nota

  • Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
  • Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Use los siguientes pasos para el caso de uso. Cada paso contiene ejemplos de solicitud y respuesta:

Nota

En estos pasos se asume que la MFA está activada y que se crea una política de conexión para la MFA. Consulte Configuración de Valores de Autenticación Multifactor.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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}}"
}

En este ejemplo de caso de uso, la inscripción se envía en el siguiente paso para iniciar la inscripción del usuario.

Paso 3: Iniciar solicitud de inscripción de seguridad Duo

Este paso inicia la inscripción en la Seguridad Duo. El cliente debe incluir los siguientes atributos:

  • op: indica al servidor qué tipo de operación desea el cliente
  • authFactor: define el factor de autenticación en el que el usuario desea inscribirse
  • requestState: recibido en la respuesta del paso 2

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la solicitud con formato 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}}"
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se envía en el siguiente paso.

Paso 4: Iniciar autenticación de seguridad Duo

Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.

Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost y duoSecurityChallenge que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.

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"
    });
}

Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.

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

Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.

Paso 5: Enviar credenciales de factor

Este paso envía las credenciales de factor en requestState que se recibieron en la respuesta del paso 3. Tenga en cuenta que la carga útil de solicitud no contiene el atributo authFactor porque requestState lo contiene. El cliente debe incluir los siguientes atributos:

  • op: indica al servidor qué tipo de operación desea el cliente
  • requestState: recibido en la respuesta del paso 3

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST en formato JSON para enviar las credenciales de factor:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Los valores nextOp indican lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, createToken se envía en el siguiente paso.

Paso 6: Creación del token de autenticación

Este paso indica que el cliente ha terminado y necesita una sesión creada. El servidor valida que no se necesita ninguna otra evaluación de factores (según lo definido para la política) y responde con el token o deniega el acceso. El cliente debe incluir los siguientes atributos:
  • op: indica al servidor qué tipo de operación desea el cliente
  • requestState: recibido en la respuesta del paso 5

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Inscribir a un nuevo usuario con Duo Security mediante Web SDK v4

Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de los dominios de identidad para inscribir a un nuevo usuario y un dispositivo asociado con el SDK web de Duo v4.

Nota

Si necesita activar Duo Web SDK v4, consulte Activación de Duo Web SDK v4.
Nota

  • Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
  • Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Use los siguientes pasos para el caso de uso. Cada paso contiene ejemplos de solicitud y respuesta:

Nota

En estos pasos se asume que la MFA está activada y que se crea una política de conexión para la MFA. Consulte Configuración de Valores de Autenticación Multifactor.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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}}"
}

En este ejemplo de caso de uso, la inscripción se envía en el siguiente paso para iniciar la inscripción del usuario.

Paso 3: Iniciar solicitud de inscripción de seguridad Duo

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la solicitud con formato 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
   }
}

Paso 4: Iniciar autenticación de seguridad Duo

Durante la autenticación de Duo Security, el explorador redirige al servidor de Duo Security y, a continuación, carga la página de autenticación secundaria en la que el usuario realiza la autenticación secundaria. Después de una autenticación correcta, Duo Security Server responde con los parámetros de estado (duoSecurityAuthzState) y código (duoSecurityAuthzCode). Estos parámetros se deben enviar al dominio de identidad para completar la autenticación.

Utilice los siguientes pasos para obtener los parámetros de estado y código:

  1. Obtenga la URL a la que desea redirigir desde duoSecurityAuthzRequest.

    Por ejemplo:
    "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>"

    Es la URL de redireccionamiento para duoSecurityAuthzRedirectURL.

  2. Realice la redirección 303 al servidor de seguridad Duo.

  3. Complete el proceso de inscripción y autentificación de Duo Security.

    El servidor de Duo Security vuelve a redireccionar a duoSecurityAuthzRedirectURL con duoSecurityAuthzState y duoSecurityAuthzCode.

Paso 5: Enviar credenciales de factor

Transfiera duoSecurityAuthzState y duoSecurityAuthzCode de la respuesta al dominio de identidad para completar la autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON:

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

Ejemplo de respuesta

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

Paso 6: Creación del token de autenticación

Este paso indica que el cliente ha terminado y necesita una sesión creada. El servidor valida que no se necesita ninguna otra evaluación de factores (según lo definido para la política) y responde con el token o deniega el acceso. El cliente debe incluir los siguientes atributos:
  • op: indica al servidor qué tipo de operación desea el cliente
  • requestState: recibido en la respuesta del paso 5

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v2

Este caso de uso proporciona un ejemplo paso a paso del uso de la API de autenticación de dominios de identidad para autenticar una cuenta de usuario con Duo Web SDK v2.

Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Nota

En estos pasos se asume que la MFA está activada y que se crea una política de conexión para la MFA. Consulte Configuración de Valores de Autenticación Multifactor

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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}}"
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se envía en el siguiente paso.

Paso 3: Iniciar autenticación de seguridad Duo

Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.

Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost y duoSecurityChallenge que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.

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"
    });
}

Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.

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

Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.

Paso 4: Enviar credenciales de factor

Este paso envía las credenciales de factor en requestState que se recibieron en la respuesta del paso 2. Tenga en cuenta que la carga útil de solicitud no contiene el atributo authFactor porque requestState lo contiene. El cliente debe incluir los siguientes atributos:

  • op: indica al servidor qué tipo de operación desea el cliente
  • requestState: recibido en la respuesta del paso 2

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST en formato JSON para enviar las credenciales de factor:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v4

Este caso de uso proporciona un ejemplo paso a paso del uso de la API de autenticación de dominios de identidad para autenticar una cuenta de usuario con Duo Web SDK v4.

Nota

Si necesita activar Duo Web SDK v4, consulte Activación de Duo Web SDK v4.
Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Nota

En estos pasos se asume que la MFA está activada y que se crea una política de conexión para la MFA. Consulte Configuración de Valores de Autenticación Multifactor.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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}}"
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se envía en el siguiente paso.

Paso 3: Iniciar autenticación de seguridad Duo

Durante la autenticación de Duo Security, el explorador redirige al servidor de Duo Security y, a continuación, carga la página de autenticación secundaria en la que el usuario realiza la autenticación secundaria. Después de una autenticación correcta, Duo Security Server responde con los parámetros de estado (duoSecurityAuthzState) y código (duoSecurityAuthzCode). Estos parámetros se deben enviar al dominio de identidad para completar la autenticación.

Utilice los siguientes pasos para obtener los parámetros de estado y código:

  1. Obtenga la URL a la que desea redirigir desde duoSecurityAuthzRequest.

    Por ejemplo:
    "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>"

    Es la URL de redireccionamiento para duoSecurityAuthzRedirectURL.

  2. Realice la redirección 303 al servidor de seguridad Duo.

  3. Complete el proceso de inscripción y autentificación de Duo Security.

    El servidor de Duo Security vuelve a redireccionar a duoSecurityAuthzRedirectURL con duoSecurityAuthzState y duoSecurityAuthzCode.

Paso 4: Enviar credenciales de factor

Transfiera duoSecurityAuthzState y duoSecurityAuthzCode de la respuesta al dominio de identidad para completar la autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON:

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

Ejemplo de respuesta

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

Autenticación de un usuario con Duo Security cuando se utiliza como factor de copia de seguridad

Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para autenticar una cuenta de usuario con Duo Security, incluso cuando está configurada como factor de copia de seguridad.

Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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}}"
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, getBackupFactors se envía en el siguiente paso.

Paso 3: Obtener la lista de factores de copia de seguridad

Este paso permite obtener la lista de factores de copia de seguridad.

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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
    }
}

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 4: Seleccione Duo Security de la lista de factores de copia de seguridad

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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
	}
}

Definir Duo Security como factor preferido

Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para definir Duo Security como el factor preferido para la autenticación.

Puede definir el indicador preferred en true para que Duo Security sea un factor preferido si un usuario ya tiene otro factor que no sea Duo Security como preferido.

Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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
    }
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se envía en el siguiente paso.

Paso 3: Iniciar autenticación de seguridad Duo

Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.

Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost y duoSecurityChallenge que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.

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"
    });
}

Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.

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

Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.

Paso 4: Habilitar Duo Security como el factor preferido

Este paso activa Duo Security como factor preferido. Para este paso, el cliente debe incluir los siguientes atributos:
  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Compatibilidad con dispositivos de confianza al usar Duo como factor de autenticación

Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para admitir dispositivos de confianza al usar Duo como factor de autenticación.

Consejo

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-authn-api-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Paso 1: Inicio del flujo de autenticación

Obtenga el requestState inicial para iniciar el flujo de autenticación.

Ejemplo de solicitud

En el siguiente ejemplo se muestra la solicitud con formato cURL:

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

appName es opcional. appName es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

En la respuesta, el valor nextOp indica lo que se puede enviar como valor op en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se debe enviar en el siguiente paso. requestState contiene datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:

  • credentials: nombre de usuario y contraseña

  • requestState: recibido en la respuesta del paso 1

  • op: indica al servidor qué tipo de operación desea el cliente

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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
    }
}

En la respuesta, los valores nextOp indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit se envía en el siguiente paso.

Paso 3: Iniciar autenticación de seguridad Duo

Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.

Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost y duoSecurityChallenge que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.

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"
    });
}

Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.

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

Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.

Paso 4: Activar un dispositivo como de confianza

Este paso permite que un dispositivo sea de confianza. Una vez que el dispositivo es de confianza, la MFA no será cuestionada aunque Duo Security esté inscrito.

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:

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

Inscripción en MFA con Duo Security mediante autoservicio

Este caso de uso proporciona un ejemplo paso a paso del uso de la API de REST de dominios de identidad para la inscripción de autoservicio en la autenticación multifactor (MFA) mediante Duo Security.

Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-rest-clients en el repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.

Como paso de requisito, debe obtener un token de ME antes de seguir estos pasos. Consulte Generación de token de acceso mediante la API de autenticación para obtener información sobre la obtención de un token de ME.

Nota

En estos pasos se asume que los factores relevantes de la MFA se activan mediante Configurar valores de autenticación multifactor.

Step1: inscripción de un usuario con factor Duo

Este paso inicia la inscripción de Duo Security en una solicitud POST al punto final /admin/v1/MyAuthenticationFactorEnroller. El cliente debe incluir el siguiente atributo:
  • value: define el ID de usuario. Puede realizar una llamada GET a {{HOST}}/admin/v1/Me para obtener el valor "id".

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido del cuerpo de solicitud POST con formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido del cuerpo de respuesta con formato 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"
}

En la respuesta, se deben transferir deviceId y requestId en el siguiente paso.

Paso 2: Iniciar la autenticación Duo para el usuario

Este paso inicia la autenticación en el lado de terceros mediante el envío de una solicitud POST al punto final /admin/v1/MyAuthenticationFactorInitiator. El cliente debe incluir los siguientes atributos:

  • requestId: recibido en la respuesta del paso 1
  • deviceId: recibido en la respuesta del paso 1
  • userName: nombre de usuario

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido del cuerpo de solicitud POST con formato 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"
    ]
}

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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"
        }
    ]
}

En la respuesta, se deben transferir deviceId y requestId en el siguiente paso.

Paso 3: Validar factor de duplicación para escenario de inscripción

En este paso se llama a la API de factor de terceros con credenciales recopiladas para validar la inscripción de un usuario en una solicitud POST al punto final /admin/v1/MyAuthenticationFactorValidator.

El cliente debe incluir los siguientes atributos:

  • requestId: recibido en la respuesta del paso 2
  • deviceId: recibido en la respuesta del paso 2

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato 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"
        }
    ]
}

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta con formato 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
}

En la respuesta, el atributo mfaStatus:"ENROLLED" indica que el usuario se ha inscrito en MFA. El atributo mfaPreferredAuthenticationFactor indica el juego de factores como método preferido. En este caso, es THIRDPARTY.