Uso della sicurezza Duo con i domini di Identity
Questi casi d'uso forniscono un esempio dettagliato dell'uso di Duo Web SDK v2 o Duo Web SDK v4 con un dominio 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
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
{
"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:
{
"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.
-
Utilizzo di cURL,
GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsEsempio 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" } - Eseguire il backup dell'istanza nel caso sia necessario eseguire il rollback.
-
Aggiornare il payload dal passo 1 aggiungendo
enableWebSDKv4eduoSecurityAuthzRedirectUrlnella sezioneurn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.enableWebSDKv4: il valore predefinito èfalse. SeenableWebSDKv4è 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 conduoSecurityAuthzStateeduoSecurityAuthzCode. È 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(integrationKeyin v2)clientSecret(secretKeyin 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" } } -
Utilizzando cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsutilizzando 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.
- 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.
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
-
Iscrizione di un nuovo utente con sicurezza Duo tramite Web SDK v4
-
Autenticazione di un account utente con sicurezza Duo mediante SDK Web v2
-
Autenticazione di un account utente con sicurezza Duo mediante SDK Web v4
-
Autenticazione di un utente con sicurezza Duo se utilizzata come fattore di backup
-
Supporta dispositivo sicuro quando usi Duo come fattore di autenticazione
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.
- 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.
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:
- Passo 1: avviare il flusso di autenticazione
- Passo 2: sottomettere le credenziali dell'utente
- Passo 3: Avvia richiesta di iscrizione sicurezza Duo
- Passo 4: avviare l'autenticazione di sicurezza Duo
- Passo 5: Sottometti credenziali fattore
- Passo 6: Creare il token di autenticazione
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}}
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 clientauthFactor: definisce il fattore di autenticazione a cui l'utente desidera iscriversirequestState: 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 clientrequestState: 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
op: indica al server il tipo di operazione desiderata dal clientrequestState: 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.
- 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.
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:
- Passo 1: avviare il flusso di autenticazione
- Passo 2: sottomettere le credenziali dell'utente
- Passo 3: Avvia richiesta di iscrizione sicurezza Duo
- Passo 4: avviare l'autenticazione di sicurezza Duo
- Passo 5: Sottometti credenziali fattore
- Passo 6: Creare il token di autenticazione
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}}
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.
-
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. -
Reindirizza 303 al server di sicurezza Duo.
-
Completare il processo di registrazione e autenticazione di Duo Security.
Il server di sicurezza Duo reindirizza a
duoSecurityAuthzRedirectURLconduoSecurityAuthzStateeduoSecurityAuthzCode.
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
op: indica al server il tipo di operazione desiderata dal clientrequestState: 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.
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.
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}}
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 clientrequestState: 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.
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.
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}}
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.
-
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. -
Reindirizza 303 al server di sicurezza Duo.
-
Completare il processo di registrazione e autenticazione di Duo Security.
Il server di sicurezza Duo reindirizza a
duoSecurityAuthzRedirectURLconduoSecurityAuthzStateeduoSecurityAuthzCode.
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.
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}}
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
-
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.
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}}
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
-
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.
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}}
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.
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
/admin/v1/MyAuthenticationFactorEnroller. Il client deve includere il seguente attributo: value: definisce l'ID utente. È possibile effettuare una chiamata GET a{{HOST}}/admin/v1/Meper 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 1deviceId:ricevuto nella risposta del passo 1userName: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.