Uso de la seguridad de Duo con dominios de identidad

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

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 de 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 va a 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 la 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 en 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 de Duo Web SDK v4

Duo Web SDK 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 Duo Web SDK 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 web de Duo 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 seguridad Duo.

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

    • client_id (integrationKey en v2)
    • clientSecret (secretKey en v2)
    • apiHostName (sin cambios de v2)
    • userMappingAttribute (sin cambios 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 con 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 los dominios de identidad para autenticar usuarios y realizar la inscripción y autenticación multifactor con el SDK web de Duo v2 o el SDK web de Duo v4.

Nota

  • Utilice esta API de autenticación solo si está creando su propia experiencia de inicio de sesión integral mediante el desarrollo de una aplicación de inicio de sesió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 para la 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 juegos de ejemplos:

Inscripción de un nuevo 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 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 está creando su propia experiencia de inicio de sesión integral mediante el desarrollo de una aplicación de inicio de sesió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 para la 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.

Utilice 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 Configure Multifactor Authentication Settings.

Paso 1: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 Petición Inscripción Seguridad Duo

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

  • op: indica al servidor qué tipo de operación desea el cliente
  • authFactor: define en qué factor de autenticación desea inscribirse el usuario
  • 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:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la solicitud en 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 la autenticación de seguridad de Duo

Utilice el SDK web de Duo v2 para integrar los 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 recibió de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad Duo y cargar iFrame para realizar una conexión con el servidor de seguridad 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"
    });
}

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

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

A continuación, al 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 en 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: Crear el token de autenticación

Este paso indica que el cliente ha finalizado y necesita que se cree una sesión. 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 en formato JSON:

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

Ejemplo de respuesta

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

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

Inscripción de un nuevo 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 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 está creando su propia experiencia de inicio de sesión integral mediante el desarrollo de una aplicación de inicio de sesió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 para la 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.

Utilice 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 Configure Multifactor Authentication Settings.

Paso 1: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 Petición Inscripción Seguridad Duo

Ejemplo de solicitud

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

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la solicitud en 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 la autenticación de seguridad de 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 donde el usuario realiza la autenticación secundaria. Después de la autenticación correcta, el servidor de seguridad Duo 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 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 redirección para duoSecurityAuthzRedirectURL.

  2. 303 Redirección al servidor de seguridad Duo.

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

    Duo Security Server redirige de nuevo 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 en 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: Crear el token de autenticación

Este paso indica que el cliente ha finalizado y necesita que se cree una sesión. 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 en formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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 el SDK web de Duo 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 los valores de autenticación multifactor

Paso 1: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 la autenticación de seguridad de Duo

Utilice el SDK web de Duo v2 para integrar los 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 recibió de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad Duo y cargar iFrame para realizar una conexión con el servidor de seguridad 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"
    });
}

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

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

A continuación, al 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 en 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 el SDK web de Duo 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 Configure Multifactor Authentication Settings.

Paso 1: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 la autenticación de seguridad de 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 donde el usuario realiza la autenticación secundaria. Después de la autenticación correcta, el servidor de seguridad Duo 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 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 redirección para duoSecurityAuthzRedirectURL.

  2. 303 Redirección al servidor de seguridad Duo.

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

    Duo Security Server redirige de nuevo 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 en 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 paso a paso del uso de la API de REST de los 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: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 en formato JSON:

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

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

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

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

  • 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 en 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 en 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 paso a paso de cómo utilizar la API de REST de los 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: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 la autenticación de seguridad de Duo

Utilice el SDK web de Duo v2 para integrar los 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 recibió de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad Duo y cargar iFrame para realizar una conexión con el servidor de seguridad 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"
    });
}

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

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

A continuación, al recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.

Paso 4: Activar Duo Security como el factor preferido

Este paso permite que Duo Security sea el factor preferido. Para este paso, el cliente debe incluir los siguientes atributos:
  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en formato JSON:

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

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

Este caso de uso proporciona un ejemplo paso a paso del uso de la API de REST de los dominios de identidad para admitir un dispositivo de confianza al utilizar 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: Iniciar el flujo de autenticación

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

Ejemplo de solicitud

El siguiente ejemplo muestra la solicitud en 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 un 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 basados en esa política.

Ejemplo de respuesta

En el siguiente ejemplo se muestra el contenido de la respuesta en 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, se debe enviar credSubmit en el siguiente paso. requestState contiene los datos contextuales necesarios para procesar la solicitud.

Paso 2: Enviar las credenciales del usuario

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

  • Nombre de usuario y contraseña credentials:

  • 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 en 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 en 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 la autenticación de seguridad de Duo

Utilice el SDK web de Duo v2 para integrar los 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 recibió de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad Duo y cargar iFrame para realizar una conexión con el servidor de seguridad 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"
    });
}

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

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

A continuación, al 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 se desafiará aunque Duo Security esté inscrito.

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido de la solicitud POST en 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 en 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 los 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 previo, debe obtener un token 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 ME.

Nota

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

Step1: inscripción de un usuario con factor de duplicación

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 la solicitud POST en 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 en 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, deviceId y requestId se deben transferir 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
  • Nombre de usuario userName: del usuario

Ejemplo de solicitud

En el siguiente ejemplo se muestra el contenido del cuerpo de la solicitud POST en 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 en 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, deviceId y requestId se deben transferir en el siguiente paso.

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

Este paso 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 en 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 en 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 para MFA. El atributo mfaPreferredAuthenticationFactor indica que el factor definido es el método preferido. En este caso, es THIRDPARTY.