Uso de la seguridad de Duo con dominios de identidad
Estos casos de uso proporcionan un ejemplo paso a paso del uso del SDK web de Duo v2 o del SDK web de Duo v4 con un dominio 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
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
{
"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:
{
"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.
-
Uso de cURL,
GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsEjemplo 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" } - Realice una copia de seguridad de la instancia en caso de que sea necesario realizar un rollback.
-
Actualice la carga útil del paso 1 agregando
enableWebSDKv4yduoSecurityAuthzRedirectUrlen la secciónurn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.enableWebSDKv4: el valor por defecto esfalse. SienableWebSDKv4es 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 conduoSecurityAuthzStateyduoSecurityAuthzCode. 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(integrationKeyen v2)clientSecret(secretKeyen 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" } } -
Mediante cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingscon 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.
- 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.
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
-
Inscripción de un nuevo usuario con Duo Security mediante el SDK web v4
-
Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v2
-
Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v4
-
Autenticación de un usuario con Duo Security cuando se utiliza como factor de copia de seguridad
-
Compatibilidad con dispositivos de confianza al utilizar Duo como factor de autenticación
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.
- 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.
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:
- Paso 1: Iniciar el flujo de autenticación
- Paso 2: Enviar las credenciales del usuario
- Paso 3: Iniciar Petición Inscripción Seguridad Duo
- Paso 4: Iniciar la autenticación de seguridad de Duo
- Paso 5: Enviar credenciales de factor
- Paso 6: Crear el token de autenticación
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}}
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 clienteauthFactor: define en qué factor de autenticación desea inscribirse el usuariorequestState: 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 clienterequestState: 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
op: indica al servidor qué tipo de operación desea el clienterequestState: 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.
- 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.
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:
- Paso 1: Iniciar el flujo de autenticación
- Paso 2: Enviar las credenciales del usuario
- Paso 3: Iniciar Petición Inscripción Seguridad Duo
- Paso 4: Iniciar la autenticación de seguridad de Duo
- Paso 5: Enviar credenciales de factor
- Paso 6: Crear el token de autenticación
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}}
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:
-
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. -
303 Redirección al servidor de seguridad Duo.
-
Complete el proceso de inscripción y autenticación de Duo Security.
Duo Security Server redirige de nuevo a
duoSecurityAuthzRedirectURLconduoSecurityAuthzStateyduoSecurityAuthzCode.
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
op: indica al servidor qué tipo de operación desea el clienterequestState: 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.
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 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}}
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 clienterequestState: 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.
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 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}}
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:
-
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. -
303 Redirección al servidor de seguridad Duo.
-
Complete el proceso de inscripción y autenticación de Duo Security.
Duo Security Server redirige de nuevo a
duoSecurityAuthzRedirectURLconduoSecurityAuthzStateyduoSecurityAuthzCode.
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.
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}}
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
-
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.
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}}
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
-
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.
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}}
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.
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
/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/Mepara 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 1deviceId: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.