Uso della sicurezza Duo con i domini di Identity

Aggiornamento delle impostazioni dei fattori di autenticazione con le impostazioni di sicurezza Duo

L'esempio riportato di seguito mostra come aggiornare le impostazioni di autenticazione a più fattori per un tenant sottomettendo una richiesta PUT sulla risorsa REST mediante cURL. Per ulteriori informazioni su cURL, vedere Usa cURL.

Comando cURL

Nota

Il comando in questo esempio utilizza la struttura URL https://<domainURL>/resource-path, in cui <domainURL> rappresenta l'URL del servizio identità e il percorso risorsa rappresenta l'API del servizio identità. Vedere Invia richieste per la struttura URL appropriata da utilizzare.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Corpo richiesta

Di seguito è riportato un esempio del corpo delle richieste in formato JSON.
Corpo richiesta di esempio
{
  "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"
}

Corpo risposta

L'esempio seguente mostra il contenuto del corpo della risposta in formato JSON:

Corpo risposta di esempio
{
    "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"
}

Abilitazione di Duo Web SDK v4

L'SDK Web Duo v2 (iFrame) è abilitato in un dominio di Identity per impostazione predefinita. Per utilizzare Duo Web SDK v4, è necessario abilitarlo.

Per abilitare Duo Web SDK v4, attenersi alle istruzioni riportate di seguito.

  1. Utilizzo di cURL, GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings

    Esempio di risposta

    Dovresti vedere le seguenti impostazioni di Duo Web SDK v2.

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
          "integrationKey": "<integration-key>",
          "secretKey": "<secret-key>",
          "apiHostname": "api-example.duosecurity.com",
          "userMappingAttribute": "userName"
    }
  2. Eseguire il backup dell'istanza nel caso sia necessario eseguire il rollback.
  3. Aggiornare il payload dal passo 1 aggiungendo enableWebSDKv4 e duoSecurityAuthzRedirectUrl nella sezione urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.

    • enableWebSDKv4: il valore predefinito è false. Se enableWebSDKv4 è false, viene utilizzato Duo Web SDK v2.
    • duoSecurityAuthzRedirectUrl: il valore predefinito è vuoto. Aggiungere l'URL dell'organizzazione qui. L'URL di reindirizzamento viene utilizzato per avviare l'autenticazione di sicurezza Duo, che riceve una risposta dal server di sicurezza Duo con duoSecurityAuthzState e duoSecurityAuthzCode. È possibile eseguire l'override di questo URL utilizzando l'interfaccia utente personalizzata. L'interfaccia utente personalizzata deve utilizzare questo endpoint per ricevere il codice e il parametro dal server di sicurezza Duo.

    Tenere presente che l'attributo seguente cambia da v2 a v4.

    • client_id (integrationKey in v2)
    • clientSecret (secretKey in v2)
    • apiHostName (nessuna modifica da v2)
    • userMappingAttribute (nessuna modifica da v2)

    Esempio di richiesta

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
           "integrationKey": "<integration-key>",
           "secretKey": ""<secret-key>"",
           "apiHostname": "api-6ff7f509.duosecurity.com",
           "userMappingAttribute": "primaryEmail",
           "enableWebSDKv4": true,
           "duoSecurityAuthzRedirectUrl": "https://abc.co/a/c"
       }
    }
  4. Utilizzando cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings utilizzando il payload del passo 3.

Autenticazione di nome utente e password con sicurezza Duo come fattore di autenticazione

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di identità per autenticare gli utenti ed eseguire la registrazione e l'autenticazione con più fattori con Duo Web SDK v2 o Duo Web SDK v4.

Nota

  • Utilizzare questa interfaccia API di autenticazione solo se si sta creando una propria esperienza di login end-to-end mediante lo sviluppo di un'applicazione di accesso personalizzata che deve essere utilizzata dai domini di identità.
  • Questa API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

In questo caso d'uso sono inclusi i set di esempio riportati di seguito.

Iscrizione di un nuovo utente con sicurezza Duo tramite Web SDK v2

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di Identity per registrare un nuovo utente e un dispositivo associato con l'SDK Web Duo v2.

Nota

  • Utilizzare questa interfaccia API di autenticazione solo se si sta creando una propria esperienza di login end-to-end mediante lo sviluppo di un'applicazione di accesso personalizzata che deve essere utilizzata dai domini di identità.
  • Questa API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

Attenersi alla procedura riportata di seguito per lo use case. Ogni passo contiene esempi di richiesta e risposta:

Nota

Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configura impostazioni di autenticazione a più fattori.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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}}"
}

In questo esempio di caso d'uso, l'iscrizione viene inviata nel passo successivo per avviare l'iscrizione per l'utente.

Passo 3: Avvia richiesta di iscrizione sicurezza Duo

Questo passo avvia la registrazione di Duo Security. Il client deve includere i seguenti attributi:

  • op: indica al server il tipo di operazione desiderata dal client
  • authFactor: definisce il fattore di autenticazione a cui l'utente desidera iscriversi
  • requestState: ricevuto nella risposta del passo 2

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della richiesta in 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}}"
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit viene inviato nel passo successivo.

Passo 4: avviare l'autenticazione di sicurezza Duo

Utilizzare Web SDK v2 di Duo per integrare i domini di identità con Duo Security. Duo offre una libreria JavaScript che interagisce con iFrame utilizzata per l'autenticazione secondaria.

Dopo l'autenticazione primaria, è necessario passare i dettagli di autenticazione, ad esempio duoSecurityHost e duoSecurityChallenge ricevuti dai domini di Identity a iFrame. È possibile utilizzare l'esempio seguente per avviare l'autenticazione di sicurezza Duo e caricare iFrame per stabilire una connessione con il server di sicurezza 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"
    });
}

Dopo aver completato il processo di autenticazione Duo, Duo chiama il metodo duoSecurityCallback per ottenere una risposta Duo.

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

Dopo aver ricevuto la risposta per Duo Security, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.

Passo 5: Sottometti credenziali fattore

Questo passo sottomette le credenziali fattore nel file requestState ricevute nella risposta del passo 3. Tenere presente che il payload della richiesta non contiene l'attributo authFactor perché è contenuto in requestState. Il client deve includere i seguenti attributi:

  • op: indica al server il tipo di operazione desiderata dal client
  • requestState: ricevuto nella risposta del passo 3

Esempio di richiesta

L'esempio riportato di seguito mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali fattore.

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

I valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, createToken viene inviato nel passo successivo.

Passo 6: Creare il token di autenticazione

Questo passaggio indica che il client è completato e richiede la creazione di una sessione. Il server verifica che non sia necessaria alcuna valutazione di altri fattori (a seconda di quanto definito per il criterio) e risponde con il token o nega l'accesso. Il client deve includere i seguenti attributi:
  • op: indica al server il tipo di operazione desiderata dal client
  • requestState: ricevuto nella risposta del passo 5

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Iscrizione di un nuovo utente con sicurezza Duo tramite Web SDK v4

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di Identity per registrare un nuovo utente e un dispositivo associato con l'SDK Web Duo v4.

Nota

Se è necessario abilitare Duo Web SDK v4, vedere Abilitazione di Duo Web SDK v4.
Nota

  • Utilizzare questa interfaccia API di autenticazione solo se si sta creando una propria esperienza di login end-to-end mediante lo sviluppo di un'applicazione di accesso personalizzata che deve essere utilizzata dai domini di identità.
  • Questa API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

Attenersi alla procedura riportata di seguito per lo use case. Ogni passo contiene esempi di richiesta e risposta:

Nota

Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configura impostazioni di autenticazione a più fattori.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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}}"
}

In questo esempio di caso d'uso, l'iscrizione viene inviata nel passo successivo per avviare l'iscrizione per l'utente.

Passo 3: Avvia richiesta di iscrizione sicurezza Duo

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della richiesta in 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
   }
}

Passo 4: avviare l'autenticazione di sicurezza Duo

Durante l'autenticazione Duo Security, il browser reindirizza al Duo Security Server, il Duo Security Server carica quindi la pagina di autenticazione secondaria in cui l'utente esegue l'autenticazione secondaria. Dopo l'autenticazione riuscita, il server di sicurezza Duo risponde con i parametri di stato (duoSecurityAuthzState) e di codice (duoSecurityAuthzCode). Per completare l'autenticazione, è necessario sottomettere questi parametri al dominio di Identity.

Per ottenere i parametri di stato e codice, effettuare le operazioni riportate di seguito.

  1. Recupera l'URL a cui reindirizzare da duoSecurityAuthzRequest.

    Ad esempio:
    "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>"

    URL di reindirizzamento per duoSecurityAuthzRedirectURL.

  2. Reindirizza 303 al server di sicurezza Duo.

  3. Completare il processo di registrazione e autenticazione di Duo Security.

    Il server di sicurezza Duo reindirizza a duoSecurityAuthzRedirectURL con duoSecurityAuthzState e duoSecurityAuthzCode.

Passo 5: Sottometti credenziali fattore

Passare duoSecurityAuthzState e duoSecurityAuthzCode dalla risposta al dominio di Identity per completare l'autenticazione.

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta in formato JSON:

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

Esempio di risposta

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

Passo 6: Creare il token di autenticazione

Questo passaggio indica che il client è completato e richiede la creazione di una sessione. Il server verifica che non sia necessaria alcuna valutazione di altri fattori (a seconda di quanto definito per il criterio) e risponde con il token o nega l'accesso. Il client deve includere i seguenti attributi:
  • op: indica al server il tipo di operazione desiderata dal client
  • requestState: ricevuto nella risposta del passo 5

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Autenticazione di un account utente con sicurezza Duo mediante SDK Web v2

Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API di autenticazione dei domini di identità per autenticare un account utente con Duo Web SDK v2.

Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Nota

Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configura impostazioni di autenticazione a più fattori

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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}}"
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit viene inviato nel passo successivo.

Passo 3: avviare l'autenticazione di sicurezza Duo

Utilizzare Web SDK v2 di Duo per integrare i domini di identità con Duo Security. Duo offre una libreria JavaScript che interagisce con iFrame utilizzata per l'autenticazione secondaria.

Dopo l'autenticazione primaria, è necessario passare i dettagli di autenticazione, ad esempio duoSecurityHost e duoSecurityChallenge ricevuti dai domini di Identity a iFrame. È possibile utilizzare l'esempio seguente per avviare l'autenticazione di sicurezza Duo e caricare iFrame per stabilire una connessione con il server di sicurezza 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"
    });
}

Dopo aver completato il processo di autenticazione Duo, Duo chiama il metodo duoSecurityCallback per ottenere una risposta Duo.

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

Dopo aver ricevuto la risposta per Duo Security, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.

Passo 4: Sottometti credenziali fattore

Questo passo sottomette le credenziali fattore nel file requestState ricevute nella risposta del passo 2. Tenere presente che il payload della richiesta non contiene l'attributo authFactor perché è contenuto in requestState. Il client deve includere i seguenti attributi:

  • op: indica al server il tipo di operazione desiderata dal client
  • requestState: ricevuto nella risposta del passo 2

Esempio di richiesta

L'esempio riportato di seguito mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali fattore.

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Autenticazione di un account utente con sicurezza Duo mediante SDK Web v4

Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API di autenticazione dei domini di identità per autenticare un account utente con Duo Web SDK v4.

Nota

Se è necessario abilitare Duo Web SDK v4, vedere Abilitazione di Duo Web SDK v4.
Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Nota

Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configura impostazioni di autenticazione a più fattori.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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}}"
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit viene inviato nel passo successivo.

Passo 3: avviare l'autenticazione di sicurezza Duo

Durante l'autenticazione Duo Security, il browser reindirizza al Duo Security Server, il Duo Security Server carica quindi la pagina di autenticazione secondaria in cui l'utente esegue l'autenticazione secondaria. Dopo l'autenticazione riuscita, il server di sicurezza Duo risponde con i parametri di stato (duoSecurityAuthzState) e di codice (duoSecurityAuthzCode). Per completare l'autenticazione, è necessario sottomettere questi parametri al dominio di Identity.

Per ottenere i parametri di stato e codice, effettuare le operazioni riportate di seguito.

  1. Recupera l'URL a cui reindirizzare da duoSecurityAuthzRequest.

    Ad esempio:
    "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>"

    URL di reindirizzamento per duoSecurityAuthzRedirectURL.

  2. Reindirizza 303 al server di sicurezza Duo.

  3. Completare il processo di registrazione e autenticazione di Duo Security.

    Il server di sicurezza Duo reindirizza a duoSecurityAuthzRedirectURL con duoSecurityAuthzState e duoSecurityAuthzCode.

Passo 4: Sottometti credenziali fattore

Passare duoSecurityAuthzState e duoSecurityAuthzCode dalla risposta al dominio di Identity per completare l'autenticazione.

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta in formato JSON:

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

Esempio di risposta

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

Autenticazione di un utente con sicurezza Duo se utilizzata come fattore di backup

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di Identity per autenticare un account utente con Duo Security anche quando è configurato come fattore di backup.

Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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}}"
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, getBackupFactors viene inviato nel passo successivo.

Passo 3: ottenere la lista dei fattori di backup

Questo passo consente di ottenere l'elenco dei fattori di backup.

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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
    }
}

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 4: Selezionare la sicurezza Duo dalla lista dei fattori di backup

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:
  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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
	}
}

Imposta la sicurezza Duo come fattore preferito

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di identità per impostare la sicurezza Duo come fattore preferito per l'autenticazione.

È possibile impostare il flag preferred su true per impostare la sicurezza Duo come fattore preferito se un utente dispone già di un fattore diverso dalla sicurezza Duo come preferito.

Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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
    }
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit viene inviato nel passo successivo.

Passo 3: avviare l'autenticazione di sicurezza Duo

Utilizzare Web SDK v2 di Duo per integrare i domini di identità con Duo Security. Duo offre una libreria JavaScript che interagisce con iFrame utilizzata per l'autenticazione secondaria.

Dopo l'autenticazione primaria, è necessario passare i dettagli di autenticazione, ad esempio duoSecurityHost e duoSecurityChallenge ricevuti dai domini di Identity a iFrame. È possibile utilizzare l'esempio seguente per avviare l'autenticazione di sicurezza Duo e caricare iFrame per stabilire una connessione con il server di sicurezza 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"
    });
}

Dopo aver completato il processo di autenticazione Duo, Duo chiama il metodo duoSecurityCallback per ottenere una risposta Duo.

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

Dopo aver ricevuto la risposta per Duo Security, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.

Passo 4: abilitare la sicurezza Duo come fattore preferito

Questo passaggio consente la sicurezza Duo come fattore preferito. Per questo passo, il client deve includere i seguenti attributi:
  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Supporta dispositivo sicuro quando usi Duo come fattore di autenticazione

Questo caso d'uso fornisce un esempio dettagliato di utilizzo dell'API REST dei domini di identità per supportare il dispositivo sicuro quando si utilizza Duo come fattore di autenticazione.

Suggerimento

Scaricare la raccolta di esempi di casi d'uso per l'autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.

Passo 1: avviare il flusso di autenticazione

Ottenere il file requestState iniziale per avviare il flusso di autenticazione.

Esempio di richiesta

L'esempio riportato di seguito mostra la richiesta in formato cURL.

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

appName è facoltativo. appName è il nome dell'app a cui il client desidera accedere. Se viene fornito un appName, i criteri di accesso specifici per l'applicazione vengono elaborati e il client viene contestato per i fattori richiesti basati su tale criterio.

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Nella risposta, il valore nextOp indica cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit deve essere inviato nel passo successivo. requestState contiene i dati contestuali necessari per elaborare la richiesta.

Passo 2: sottomettere le credenziali dell'utente

Inviare le credenziali dell'utente come primo fattore, ovvero nome utente e password. Per questo passo, il client deve includere i seguenti attributi:

  • credentials: nome utente e password

  • requestState: ricevuto nella risposta del passo 1

  • op: indica al server il tipo di operazione desiderata dal client

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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
    }
}

Nella risposta, i valori nextOp indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, credSubmit viene inviato nel passo successivo.

Passo 3: avviare l'autenticazione di sicurezza Duo

Utilizzare Web SDK v2 di Duo per integrare i domini di identità con Duo Security. Duo offre una libreria JavaScript che interagisce con iFrame utilizzata per l'autenticazione secondaria.

Dopo l'autenticazione primaria, è necessario passare i dettagli di autenticazione, ad esempio duoSecurityHost e duoSecurityChallenge ricevuti dai domini di Identity a iFrame. È possibile utilizzare l'esempio seguente per avviare l'autenticazione di sicurezza Duo e caricare iFrame per stabilire una connessione con il server di sicurezza 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"
    });
}

Dopo aver completato il processo di autenticazione Duo, Duo chiama il metodo duoSecurityCallback per ottenere una risposta Duo.

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

Dopo aver ricevuto la risposta per Duo Security, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.

Passaggio 4: abilitare un dispositivo come sicuro

Questo passaggio abilita un dispositivo come attendibile. Una volta che il dispositivo è attendibile, l'autenticazione MFA non verrà contestata anche se Duo Security è iscritto.

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in formato JSON:

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

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in formato JSON:

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

Iscrizione a MFA con Duo Security tramite Self Service

Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API REST dei domini di Identity per la registrazione self-service nell'autenticazione con più fattori (MFA) mediante Duo Security.

Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-rest-clients all'interno del repository GitHub idm-samples, quindi importarli in Postman.

Come passo prerequisito, è necessario ottenere un token ME prima di seguire questi passi. Per informazioni su come ottenere un token ME, vedere Generazione del token di accesso mediante l'API di autenticazione.

Nota

Questi passi presuppongono che i fattori rilevanti dell'autenticazione MFA siano abilitati utilizzando Configura impostazioni di autenticazione a più fattori.

Step1: Registra un utente con Duo Factor

Questo passo avvia la registrazione di Duo Security in una richiesta POST all'endpoint /admin/v1/MyAuthenticationFactorEnroller. Il client deve includere il seguente attributo:
  • value: definisce l'ID utente. È possibile effettuare una chiamata GET a {{HOST}}/admin/v1/Me per ottenere il valore "id".

Esempio di richiesta

L'esempio riportato di seguito mostra il contenuto del corpo della richiesta POST in formato JSON.

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

Esempio di risposta

L'esempio seguente mostra il contenuto del corpo della risposta in 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"
}

Nella risposta, deviceId e requestId devono essere passati nel passo successivo.

Passo 2: Avviare l'autenticazione Duo per l'utente

Questo passo avvia l'autenticazione sul lato di terze parti sottomettendo una richiesta POST all'endpoint /admin/v1/MyAuthenticationFactorInitiator. Il client deve includere i seguenti attributi:

  • requestId: ricevuto nella risposta del passo 1
  • deviceId: ricevuto nella risposta del passo 1
  • userName: nome utente dell'utente

Esempio di richiesta

L'esempio riportato di seguito mostra il contenuto del corpo della richiesta POST in 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"
    ]
}

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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"
        }
    ]
}

Nella risposta deviceId e requestId devono essere passati nel passo successivo.

Passo 3: Convalida fattore duo per scenario iscrizione

Questo passo richiama l'API dei fattori di terze parti con le credenziali raccolte per convalidare la registrazione di un utente in una richiesta POST all'endpoint /admin/v1/MyAuthenticationFactorValidator.

Il client deve includere i seguenti attributi:

  • requestId: ricevuto nella risposta del passo 2
  • deviceId: ricevuto nella risposta del passo 2

Esempio di richiesta

L'esempio seguente mostra il contenuto della richiesta POST in 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"
        }
    ]
}

Esempio di risposta

L'esempio seguente mostra il contenuto della risposta in 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
}

Nella risposta, l'attributo mfaStatus:"ENROLLED" indica che l'utente si è iscritto all'autenticazione MFA. L'attributo mfaPreferredAuthenticationFactor indica il fattore impostato come metodo preferito. In questo caso, è THIRDPARTY.