Uso de Duo Security con Dominios de Identidad
Estos casos de uso proporcionan un ejemplo paso a paso del uso del SDK de Duo Web v2 o del SDK de Duo Web v4 con un dominio de identidad.
Actualización de la configuración del factor de autenticación con la configuración de Duo Security
En el siguiente ejemplo, se muestra cómo actualizar la configuración de autenticación multifactor para un inquilino mediante el envío de una solicitud PUT en el recurso REST mediante cURL. Para obtener más información sobre cURL, consulte Uso de cURL.
comando cURL
El comando de este ejemplo utiliza la estructura de URL
https://<domainURL>/resource-path
, donde <domainURL>
representa la URL del servicio de identidad y la ruta de acceso del recurso representa la API del servicio de identidad. Consulte Enviar solicitudes para obtener la estructura de URL adecuada que se debe utilizar. curl
-X PUT
-H "Content-Type:application/scim+json"
-H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>
Cuerpo de Solicitud
{
"bypassCodeSettings": {
"helpDeskCodeExpiryInMins": 60,
"helpDeskGenerationEnabled": true,
"helpDeskMaxUsage": 5,
"length": 12,
"maxActive": 5,
"selfServiceGenerationEnabled": true
},
"clientAppSettings": {
"deviceProtectionPolicy": "NONE",
"initialLockoutPeriodInSecs": 30,
"keyPairLength": 2048,
"lockoutEscalationPattern": "Constant",
"maxFailuresBeforeLockout": 10,
"maxFailuresBeforeWarning": 5,
"maxLockoutIntervalInSecs": 86400,
"minPinLength": 6,
"policyUpdateFreqInDays": 7,
"requestSigningAlgo": "SHA256withRSA",
"sharedSecretEncoding": "Base32",
"unlockAppForEachRequestEnabled": false,
"unlockAppIntervalInSecs": 300,
"unlockOnAppForegroundEnabled": false,
"unlockOnAppStartEnabled": false
},
"compliancePolicy": [
{
"action": "Allow",
"name": "lockScreenRequired",
"value": "false"
},
{
"action": "Allow",
"name": "lockScreenRequiredUnknown",
"value": "false"
},
{
"action": "Allow",
"name": "jailBrokenDevice",
"value": "false"
},
{
"action": "Allow",
"name": "jailBrokenDeviceUnknown",
"value": "false"
},
{
"action": "Allow",
"name": "minWindowsVersion",
"value": "8.1"
},
{
"action": "Allow",
"name": "minIosVersion",
"value": "7.1"
},
{
"action": "Allow",
"name": "minAndroidVersion",
"value": "4.1"
},
{
"action": "Allow",
"name": "minIosAppVersion",
"value": "4.0"
},
{
"action": "Allow",
"name": "minAndroidAppVersion",
"value": "8.0"
},
{
"action": "Allow",
"name": "minWindowsAppVersion",
"value": "1.0"
}
],
"endpointRestrictions": {
"maxEndpointTrustDurationInDays": 15,
"maxEnrolledDevices": 5,
"maxTrustedEndpoints": 5,
"trustedEndpointsEnabled": true,
"maxIncorrectAttempts": 10
},
"id": "AuthenticationFactorSettings",
"mfaEnrollmentType": "Required",
"pushEnabled": false,
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorSettings"
],
"thirdPartyFactor": {
"duoSecurity": true
},
"notificationSettings": {
"pullEnabled": true
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
"duoSecuritySettings": {
"integrationKey": "XXXXXXXXXXXXXXXXXXXX",
"secretKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"apiHostname": "api-example.duosecurity.com",
"userMappingAttribute": "userName"
}
},
"securityQuestionsEnabled": false,
"smsEnabled": false,
"emailEnabled": false,
"bypassCodeEnabled": false,
"totpEnabled": false,
"totpSettings": {
"hashingAlgorithm": "SHA1",
"jwtValidityDurationInSecs": 300,
"keyRefreshIntervalInDays": 60,
"passcodeLength": 6,
"smsOtpValidityDurationInMins": 10,
"smsPasscodeLength": 6,
"timeStepInSecs": 30,
"timeStepTolerance": 3,
"emailOtpValidityDurationInMins": 10,
"emailPasscodeLength": 6
},
"mfaEnabledCategory": "NONE"
}
Cuerpo de Respuesta
En el siguiente ejemplo se muestra el contenido del cuerpo de respuesta con formato JSON:
{
"bypassCodeSettings": {
"helpDeskCodeExpiryInMins": 60,
"helpDeskGenerationEnabled": true,
"helpDeskMaxUsage": 5,
"length": 12,
"maxActive": 5,
"selfServiceGenerationEnabled": true
},
"clientAppSettings": {
"deviceProtectionPolicy": "NONE",
"initialLockoutPeriodInSecs": 30,
"keyPairLength": 2048,
"lockoutEscalationPattern": "Constant",
"maxFailuresBeforeLockout": 10,
"maxFailuresBeforeWarning": 5,
"maxLockoutIntervalInSecs": 86400,
"minPinLength": 6,
"policyUpdateFreqInDays": 7,
"requestSigningAlgo": "SHA256withRSA",
"sharedSecretEncoding": "Base32",
"unlockAppForEachRequestEnabled": false,
"unlockAppIntervalInSecs": 300,
"unlockOnAppForegroundEnabled": false,
"unlockOnAppStartEnabled": false
},
"compliancePolicy": [
{
"action": "Allow",
"name": "lockScreenRequired",
"value": "false"
},
{
"action": "Allow",
"name": "lockScreenRequiredUnknown",
"value": "false"
},
{
"action": "Allow",
"name": "jailBrokenDevice",
"value": "false"
},
{
"action": "Allow",
"name": "jailBrokenDeviceUnknown",
"value": "false"
},
{
"action": "Allow",
"name": "minWindowsVersion",
"value": "8.1"
},
{
"action": "Allow",
"name": "minIosVersion",
"value": "7.1"
},
{
"action": "Allow",
"name": "minAndroidVersion",
"value": "4.1"
},
{
"action": "Allow",
"name": "minIosAppVersion",
"value": "4.0"
},
{
"action": "Allow",
"name": "minAndroidAppVersion",
"value": "8.0"
},
{
"action": "Allow",
"name": "minWindowsAppVersion",
"value": "1.0"
}
],
"endpointRestrictions": {
"maxEndpointTrustDurationInDays": 15,
"maxEnrolledDevices": 5,
"maxTrustedEndpoints": 5,
"trustedEndpointsEnabled": true,
"maxIncorrectAttempts": 10
},
"id": "AuthenticationFactorSettings",
"mfaEnrollmentType": "Required",
"pushEnabled": false,
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorSettings"
],
"thirdPartyFactor": {
"duoSecurity": true
},
"notificationSettings": {
"pullEnabled": true
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
"duoSecuritySettings": {
"integrationKey": "XXXXXXXXXXXXXXXXXXXX",
"secretKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"apiHostname": "api-example.duosecurity.com",
"userMappingAttribute": "userName"
}
},
"securityQuestionsEnabled": false,
"smsEnabled": false,
"emailEnabled": false,
"bypassCodeEnabled": false,
"totpEnabled": false,
"totpSettings": {
"hashingAlgorithm": "SHA1",
"jwtValidityDurationInSecs": 300,
"keyRefreshIntervalInDays": 60,
"passcodeLength": 6,
"smsOtpValidityDurationInMins": 10,
"smsPasscodeLength": 6,
"timeStepInSecs": 30,
"timeStepTolerance": 3,
"emailOtpValidityDurationInMins": 10,
"emailPasscodeLength": 6
},
"meta": {
"lastModified": "2022-10-15T07:44:53.601Z",
"resourceType": "AuthenticationFactorSettings",
"created": "2022-10-04T06:56:10.285Z",
"location": "https://<domainURL>/admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings"
},
"idcsLastModifiedBy": {
"value": "5753639d3ca046f094a8f4aeaf9ea5e5",
"type": "App",
"display": "testPostman",
"$ref": "https://<domainURL>/admin/v1/Apps/5753639d3ca046f094a8f4aeaf9ea5e5"
},
"idcsCreatedBy": {
"value": "c480fd39014e40f3bf4f963b3b6a423b",
"type": "App",
"display": "idcssm",
"$ref": "https://<domainURL>/admin/v1/Apps/c480fd39014e40f3bf4f963b3b6a423b"
},
"mfaEnabledCategory": "NONE"
}
Activación del SDK de Duo Web v4
El SDK de Duo Web v2 (iFrame) está activado por defecto en un dominio de identidad. Para utilizar Duo Web SDK v4, debe activarlo.
Utilice las siguientes instrucciones para activar el SDK de Duo Web v4.
-
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" }
- 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
enableWebSDKv4
yduoSecurityAuthzRedirectUrl
en la secciónurn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings
.enableWebSDKv4
: el valor por defecto esfalse
. SienableWebSDKv4
es false, se utiliza el SDK de Duo Web v2.-
duoSecurityAuthzRedirectUrl
: el valor por defecto está en blanco. Agregue la URL de su organización aquí. La URL de redirección se utiliza para iniciar la autenticación de seguridad de Duo, que recibe una respuesta del servidor de seguridad de Duo conduoSecurityAuthzState
yduoSecurityAuthzCode
. Esta URL se puede sustituir mediante la interfaz de usuario personalizada. La interfaz de usuario personalizada debe utilizar este punto final para recibir el código y el parámetro del servidor de Duo Security.
Tenga en cuenta que el siguiente atributo cambia de v2 a v4.
client_id
(integrationKey
en v2)clientSecret
(secretKey
en v2)apiHostName
(sin cambio de v2)userMappingAttribute
(sin cambio de v2)
Ejemplo de solicitud
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": { "duoSecuritySettings": { "integrationKey": "<integration-key>", "secretKey": ""<secret-key>"", "apiHostname": "api-6ff7f509.duosecurity.com", "userMappingAttribute": "primaryEmail", "enableWebSDKv4": true, "duoSecurityAuthzRedirectUrl": "https://abc.co/a/c" } }
-
Mediante cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings
mediante la carga útil del paso 3.
Autenticación de Nombre de Usuario y Contraseña con Duo Security como Factor de Autenticación
Este caso de uso proporciona un ejemplo paso a paso del uso de la API de REST de dominios de identidad para autenticar usuarios y realizar una inscripción y autenticación multifactor con Duo Web SDK v2 o Duo Web SDK v4.
- Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
- Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
En este caso de uso se incluyen los siguientes conjuntos de ejemplo:
-
Inscribir a un nuevo usuario con Duo Security mediante Web SDK v2
-
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 usar Duo como factor de autenticación
Inscribir a un nuevo usuario con Duo Security mediante Web SDK v2
Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de los dominios de identidad para inscribir a un nuevo usuario y un dispositivo asociado con el SDK web de Duo v2.
- Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
- Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Use los siguientes pasos para el caso de uso. Cada paso contiene ejemplos de solicitud y respuesta:
- Paso 1: Inicio del flujo de autenticación
- Paso 2: Enviar las credenciales del usuario
- Paso 3: Iniciar solicitud de inscripción de seguridad Duo
- Paso 4: Iniciar autenticación de seguridad Duo
- Paso 5: Enviar credenciales de factor
- Paso 6: Creación del 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 Configuración de Valores de Autenticación Multifactor.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En este ejemplo de caso de uso, la inscripción se envía en el siguiente paso para iniciar la inscripción del usuario.
Paso 3: Iniciar solicitud de inscripción de seguridad Duo
Este paso inicia la inscripción en la Seguridad Duo. El cliente debe incluir los siguientes atributos:
op
: indica al servidor qué tipo de operación desea el clienteauthFactor
: define el factor de autenticación en el que el usuario desea inscribirserequestState
: recibido en la respuesta del paso 2
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "enrollment",
"authFactor": "DUO_SECURITY",
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjMwNTM=
|5853cc561ded98c72426b633a1b1e719401e2345:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjYzNTM=
|37f594101a380ff3902e0a2cb545346ed196bbca",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se envía en el siguiente paso.
Paso 4: Iniciar autenticación de seguridad Duo
Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.
Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost
y duoSecurityChallenge
que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback
para obtener una respuesta de Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.
Paso 5: Enviar credenciales de factor
Este paso envía las credenciales de factor en requestState que se recibieron en la respuesta del paso 3. Tenga en cuenta que la carga útil de solicitud no contiene el atributo authFactor porque requestState lo contiene. El cliente debe incluir los siguientes atributos:
op
: indica al servidor qué tipo de operación desea el 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 con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Los valores nextOp
indican lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, createToken
se envía en el siguiente paso.
Paso 6: Creación del token de autenticación
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 con formato JSON:
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{ "authnToken": "{{authnToken}}", "status": "success" }
Inscribir a un nuevo usuario con Duo Security mediante Web SDK v4
Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de los dominios de identidad para inscribir a un nuevo usuario y un dispositivo asociado con el SDK web de Duo v4.
- Utilice esta API de autenticación solo si va a crear su propia experiencia de conexión integral mediante el desarrollo de una aplicación de conexión personalizada para que la utilicen los dominios de identidad.
- Esta API de autenticación no se puede utilizar para integrar sus aplicaciones con dominios de identidad con fines de conexión única.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Use los siguientes pasos para el caso de uso. Cada paso contiene ejemplos de solicitud y respuesta:
- Paso 1: Inicio del flujo de autenticación
- Paso 2: Enviar las credenciales del usuario
- Paso 3: Iniciar solicitud de inscripción de seguridad Duo
- Paso 4: Iniciar autenticación de seguridad Duo
- Paso 5: Enviar credenciales de factor
- Paso 6: Creación del 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 Configuración de Valores de Autenticación Multifactor.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En este ejemplo de caso de uso, la inscripción se envía en el siguiente paso para iniciar la inscripción del usuario.
Paso 3: Iniciar solicitud de inscripción de seguridad Duo
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "enrollment",
"authFactor": "DUO_SECURITY",
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON.
{
"status": "success",
"ecId": "i2tul0R0000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityAuthzCode",
"duoSecurityAuthzState"
],
"authnDetails": {
"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "requestState",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Paso 4: Iniciar autenticación de seguridad Duo
Durante la autenticación de Duo Security, el explorador redirige al servidor de Duo Security y, a continuación, carga la página de autenticación secundaria en la que el usuario realiza la autenticación secundaria. Después de una autenticación correcta, Duo Security Server responde con los parámetros de estado (duoSecurityAuthzState) y código (duoSecurityAuthzCode). Estos parámetros se deben enviar al dominio de identidad para completar la autenticación.
Utilice los siguientes pasos para obtener los parámetros de estado y código:
-
Obtenga la URL a la que desea redirigir desde
duoSecurityAuthzRequest
.Por ejemplo:"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
Es la URL de redireccionamiento para
duoSecurityAuthzRedirectURL
. -
Realice la redirección 303 al servidor de seguridad Duo.
-
Complete el proceso de inscripción y autentificación de Duo Security.
El servidor de Duo Security vuelve a redireccionar a
duoSecurityAuthzRedirectURL
conduoSecurityAuthzState
yduoSecurityAuthzCode
.
Paso 5: Enviar credenciales de factor
Transfiera duoSecurityAuthzState
y duoSecurityAuthzCode
de la respuesta al dominio de identidad para completar la autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON:
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Ejemplo de respuesta
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Paso 6: Creación del token de autenticación
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 con formato JSON:
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{ "authnToken": "{{authnToken}}", "status": "success" }
Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v2
Este caso de uso proporciona un ejemplo paso a paso del uso de la API de autenticación de dominios de identidad para autenticar una cuenta de usuario con Duo Web SDK v2.
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 dentro del 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 Valores de Autenticación Multifactor
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se envía en el siguiente paso.
Paso 3: Iniciar autenticación de seguridad Duo
Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.
Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost
y duoSecurityChallenge
que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.
Paso 4: Enviar credenciales de factor
Este paso envía las credenciales de factor en requestState
que se recibieron en la respuesta del paso 2. Tenga en cuenta que la carga útil de solicitud no contiene el atributo authFactor
porque requestState
lo contiene. El cliente debe incluir los siguientes atributos:
op
: indica al servidor qué tipo de operación desea el 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 con formato JSON:
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Autenticación de una cuenta de usuario con Duo Security mediante el SDK web v4
Este caso de uso proporciona un ejemplo paso a paso del uso de la API de autenticación de dominios de identidad para autenticar una cuenta de usuario con Duo Web SDK v4.
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 dentro del 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 Valores de Autenticación Multifactor.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se envía en el siguiente paso.
Paso 3: Iniciar autenticación de seguridad Duo
Durante la autenticación de Duo Security, el explorador redirige al servidor de Duo Security y, a continuación, carga la página de autenticación secundaria en la que el usuario realiza la autenticación secundaria. Después de una autenticación correcta, Duo Security Server responde con los parámetros de estado (duoSecurityAuthzState) y código (duoSecurityAuthzCode). Estos parámetros se deben enviar al dominio de identidad para completar la autenticación.
Utilice los siguientes pasos para obtener los parámetros de estado y código:
-
Obtenga la URL a la que desea redirigir desde
duoSecurityAuthzRequest
.Por ejemplo:"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
Es la URL de redireccionamiento para
duoSecurityAuthzRedirectURL
. -
Realice la redirección 303 al servidor de seguridad Duo.
-
Complete el proceso de inscripción y autentificación de Duo Security.
El servidor de Duo Security vuelve a redireccionar a
duoSecurityAuthzRedirectURL
conduoSecurityAuthzState
yduoSecurityAuthzCode
.
Paso 4: Enviar credenciales de factor
Transfiera duoSecurityAuthzState
y duoSecurityAuthzCode
de la respuesta al dominio de identidad para completar la autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud con formato JSON:
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Ejemplo de respuesta
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Autenticación de un usuario con Duo Security cuando se utiliza como factor de copia de seguridad
Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para autenticar una cuenta de usuario con Duo Security, incluso cuando está configurada como factor de copia de seguridad.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, getBackupFactors
se envía en el siguiente paso.
Paso 3: Obtener la lista de factores de copia de seguridad
Este paso permite obtener la lista de factores de copia de seguridad.
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "getBackupFactors",
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "5MyZ41p0000000000",
"nextAuthFactors": [
"EMAIL",
"BYPASSCODE",
"SECURITY_QUESTIONS",
"DUO_SECURITY"
],
"EMAIL": {
"credentials": [
"preferred",
"deviceId"
],
"enrolledDevices": [
{
"deviceId": "790ed820aee048a78de17ebe1ebddb19",
"displayName": "ashXXXXX@oracle.com"
}
]
},
"BYPASSCODE": {
"credentials": [
"bypassCode"
]
},
"SECURITY_QUESTIONS": {
"credentials": [
"questionId",
"answer"
],
"questions": [
{
"questionId": "FirstCar",
"text": "What's the model of your first car?"
}
],
"preferred": true
},
"DUO_SECURITY": {
"enrolledDevices": [
{
"deviceId": "3053eed6249a4dd4835c51bf873c5f85",
"displayName": "jarvis's Duo Security Account"
}
]
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 4: Seleccione Duo Security de la lista de factores de copia de seguridad
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"authFactor": "DUO_SECURITY",
"credentials": {
"deviceId": "3053eed6249a4dd4835c51bf873c5f85"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "5MyZ41q0000000000",
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ1NDg=
|230d8328f53ec537ecd033fbb175fbce65930c3e:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
|af94d927d3e027141177e8f88baa19f6427502ee",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Definir Duo Security como factor preferido
Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para definir Duo Security como el factor preferido para la autenticación.
Puede definir el indicador preferred
en true
para que Duo Security sea un factor preferido si un usuario ya tiene otro factor que no sea Duo Security como preferido.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "g5CAF1i1000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
|73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
|11f57d2ad044abee78d3290fdff69af7c3d22d71",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se envía en el siguiente paso.
Paso 3: Iniciar autenticación de seguridad Duo
Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.
Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost
y duoSecurityChallenge
que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.
Paso 4: Habilitar Duo Security como el factor preferido
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQzMzg=
|4a40cc9c79d4a65b48d0f9b871d7a4e83481b3ca:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
|af94d927d3e027141177e8f88baa19f6427502ee",
"preferred": true
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41r0000000000"
}
Compatibilidad con dispositivos de confianza al usar Duo como factor de autenticación
Este caso de uso proporciona un ejemplo detallado del uso de la API de REST de dominios de identidad para admitir dispositivos de confianza al usar Duo como factor de autenticación.
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 dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Paso 1: Inicio del flujo de autenticación
Obtenga el requestState
inicial para iniciar el flujo de autenticación.
Ejemplo de solicitud
En el siguiente ejemplo se muestra la solicitud con formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
es opcional. appName
es el nombre de la aplicación a la que el cliente desea acceder. Si se proporciona appName
, se procesan las políticas de conexión específicas de la aplicación y se desafía al cliente por los factores necesarios en función de esa política.Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
En la respuesta, el valor nextOp
indica lo que se puede enviar como valor op
en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se debe enviar en el siguiente paso. requestState
contiene datos contextuales necesarios para procesar la solicitud.
Paso 2: Enviar las credenciales del usuario
Envíe las credenciales del usuario como primer factor, que son el nombre de usuario y la contraseña. Para este paso, el cliente debe incluir los siguientes atributos:
-
credentials:
nombre de usuario y contraseña -
requestState:
recibido en la respuesta del paso 1 -
op:
indica al servidor qué tipo de operación desea el cliente
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"status": "success",
"ecId": "g5CAF1i1000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
|73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
|11f57d2ad044abee78d3290fdff69af7c3d22d71",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
En la respuesta, los valores nextOp
indican lo que se puede enviar como valor de operación en la siguiente solicitud. En este ejemplo de caso de uso, credSubmit
se envía en el siguiente paso.
Paso 3: Iniciar autenticación de seguridad Duo
Utilice el SDK web de Duo v2 para integrar dominios de identidad con Duo Security. Duo ofrece una biblioteca JavaScript que interactúa con iFrame que se utiliza para la autenticación secundaria.
Después de la autenticación primaria, debe transferir los detalles de autenticación como duoSecurityHost
y duoSecurityChallenge
que ha recibido de los dominios de identidad a iFrame. Puede utilizar el siguiente ejemplo para iniciar la autenticación de seguridad de Duo y cargar iFrame para realizar una conexión con Duo Security Server.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Después de completar el proceso de autenticación de Duo, Duo llama al método duoSecurityCallback para obtener una respuesta de Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Después de recibir la respuesta para Duo Security, debe transferir la respuesta a los dominios de identidad para completar la autenticación.
Paso 4: Activar un dispositivo como de confianza
Este paso permite que un dispositivo sea de confianza. Una vez que el dispositivo es de confianza, la MFA no será cuestionada aunque Duo Security esté inscrito.
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ2MDY=
|ba16e2eb734e00d9ebe6f8129ce32669437052e9:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjgwNjc=
|ba4f415559ff2c30b23a912a18ee5f717a398563"
},
"trustedDevice": true,
"trustedDeviceDisplayName": "Postman on Windows",
"requestState": "{{requestState}}"
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"authnToken": "{{authnToken}}",
"trustToken": "{{trustToken}}",
"status": "success",
"ecId": "5MyZ41u0000000000"
}
Inscripción en MFA con Duo Security mediante autoservicio
Este caso de uso proporciona un ejemplo paso a paso del uso de la API de REST de dominios de identidad para la inscripción de autoservicio en la autenticación multifactor (MFA) mediante Duo Security.
Descargue la recopilación de ejemplos de casos de uso de autenticación de dominios de identidad y el archivo de variables globales de la carpeta idcs-rest-clients dentro del repositorio idm-samples GitHub y, a continuación, impórtelos en Postman.
Como paso de requisito, debe obtener un token de ME antes de seguir estos pasos. Consulte Generación de token de acceso mediante la API de autenticación para obtener información sobre la obtención de un token de ME.
En estos pasos se asume que los factores relevantes de la MFA se activan mediante Configurar valores de autenticación multifactor.
Step1: inscripción de un usuario con factor Duo
/admin/v1/MyAuthenticationFactorEnroller
. El cliente debe incluir el siguiente atributo: value
: define el ID de usuario. Puede realizar una llamada GET a{{HOST}}/admin/v1/Me
para obtener el valor "id".
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido del cuerpo de solicitud POST con formato JSON:
{
"authnFactors":["THIRDPARTY"],
"thirdPartyFactor": {
"thirdPartyVendorName" : "DUO_SECURITY",
"thirdPartyFactorType" : "None"
},
"user": {
"value" : "012832e2e63d4bfda5bc512f2b52ccbe"
},
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
]
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido del cuerpo de respuesta con formato JSON:
{
"authnFactors": [
"THIRDPARTY"
],
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"user": {
"value": "6852e4e2bc864b3b912d7bd48f9f4879",
"$ref": "https://<domainURL>admin/v1/Users/6852e4e2bc864b3b912d7bd48f9f4879"
},
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
],
"meta": {
"resourceType": "MyAuthenticationFactorEnroller",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorEnroller"
},
"displayName": "test's Phone",
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b"
}
En la respuesta, se deben transferir deviceId
y requestId
en el siguiente paso.
Paso 2: Iniciar la autenticación Duo para el usuario
Este paso inicia la autenticación en el lado de terceros mediante el envío de una solicitud POST al punto final /admin/v1/MyAuthenticationFactorInitiator
. El cliente debe incluir los siguientes atributos:
requestId:
recibido en la respuesta del paso 1deviceId:
recibido en la respuesta del paso 1userName:
nombre de usuario
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido del cuerpo de solicitud POST con formato JSON:
{
"requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
"deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
]
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
],
"meta": {
"resourceType": "MyAuthenticationFactorInitiator",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorInitiator"
},
"additionalAttributes": [
{
"name": "duoHost",
"value": "api-0095dc4a.duosecurity.com"
},
{
"name": "duoChallenge",
"value": "TX
|Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyMDkz==
|8a0b6f0472b1c03357e9d6b3348d0a341c96e6a0:APP
|Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ 4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyNDIzNA==
|5d45c215e6e5af7d866df480087d825aa1cf4279"
}
]
}
En la respuesta, se deben transferir deviceId
y requestId
en el siguiente paso.
Paso 3: Validar factor de duplicación para escenario de inscripción
En este paso se llama a la API de factor de terceros con credenciales recopiladas para validar la inscripción de un usuario en una solicitud POST al punto final /admin/v1/MyAuthenticationFactorValidator
.
El cliente debe incluir los siguientes atributos:
-
requestId:
recibido en la respuesta del paso 2 deviceId:
recibido en la respuesta del paso 2
Ejemplo de solicitud
En el siguiente ejemplo se muestra el contenido de la solicitud POST con formato JSON:
{
"requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
"deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"scenario": "ENROLLMENT",
"username": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
],
"additionalAttributes": [
{
"name": "duoResponse",
"value": "AUTH|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMwNDc2|9439adbea1b90a90c9169f366cc028aabde8ac51:APP|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMzODYx|94bcc9a0c4ab6da617827432d021171d3b393fd3"
}
]
}
Ejemplo de respuesta
En el siguiente ejemplo se muestra el contenido de la respuesta con formato JSON:
{
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"scenario": "ENROLLMENT",
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
],
"meta": {
"resourceType": "MyAuthenticationFactorValidator",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorValidator"
},
"status": "SUCCESS",
"displayName": "test's Phone",
"mfaStatus": "ENROLLED",
"mfaPreferredDevice": "0d37a1334bdf4c9ca80474dcadba8d10",
"mfaPreferredAuthenticationFactor": "THIRDPARTY",
"mfaPreferredThirdPartyFactorType": "None",
"securityQuestionsPresent": false,
"devicesCount": 1,
"emailFactorEnrolled": false
}
En la respuesta, el atributo mfaStatus:"ENROLLED"
indica que el usuario se ha inscrito en MFA. El atributo mfaPreferredAuthenticationFactor
indica el juego de factores como método preferido. En este caso, es THIRDPARTY
.