Utilizzo della sicurezza Duo con i domini di Identity
Questi casi d'uso forniscono un esempio dettagliato dell'utilizzo 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 seguente mostra come aggiornare le impostazioni di autenticazione con più fattori per un tenant sottomettendo una richiesta PUT sulla risorsa REST utilizzando cURL. Per ulteriori informazioni su cURL, vedere Usa cURL.
Comando cURL
Il comando in questo esempio utilizza la struttura URL
https://<domainURL>/resource-path
, dove <domainURL>
rappresenta l'URL del servizio Identity e il percorso della risorsa rappresenta l'API del servizio Identity. Per la struttura URL appropriata da utilizzare, vedere Invia richieste. 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.
-
Uso 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" }
- Eseguire il backup dell'istanza se è necessario eseguire il rollback.
-
Aggiornare il payload dal passo 1 aggiungendo
enableWebSDKv4
eduoSecurityAuthzRedirectUrl
nella 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 qui l'URL dell'organizzazione. L'URL di reindirizzamento viene utilizzato per avviare l'autenticazione di sicurezza Duo, che riceve una risposta dal server di sicurezza Duo conduoSecurityAuthzState
eduoSecurityAuthzCode
. È possibile eseguire l'override di questo URL mediante 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" } }
-
Utilizzando cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings
utilizzando il payload del passo 3.
Autenticazione del nome utente e della password con la sicurezza Duo come fattore di autenticazione
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API REST dei domini di Identity 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 la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia 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 di 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 seguenti set di esempio:
-
Registrare un nuovo utente con sicurezza Duo mediante Web SDK v2
-
Iscrizione di un nuovo utente con sicurezza Duo tramite Web SDK v4
-
Autenticare un account utente con sicurezza Duo mediante Web SDK v2
-
Autenticazione di un account utente con sicurezza Duo mediante SDK Web v4
-
Autenticare un utente con sicurezza Duo se utilizzato come fattore di backup
-
Supporto di un dispositivo trusted quando si utilizza Duo come fattore di autenticazione
Registrare un nuovo utente con sicurezza Duo mediante Web SDK v2
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API REST dei domini di Identity per registrare un nuovo utente e un dispositivo associato al kit SDK Web Duo v2.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia 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 di 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.
Per il caso d'uso, attenersi alla procedura riportata di seguito. Ogni passo contiene esempi di richieste e risposte:
- Passo 1: avviare il flusso di autenticazione
- Passo 2: Invia 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 con 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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 al passo successivo per avviare l'iscrizione per l'utente.
Passo 3: Avvia richiesta di iscrizione sicurezza Duo
Questo passo avvia l'iscrizione a Duo Security. Il client deve includere i seguenti attributi:
op
: indica al server il tipo di operazione che il client desideraauthFactor
: 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, nel passo successivo viene inviato credSubmit
.
Passo 4: avviare l'autenticazione di sicurezza Duo
Utilizzare l'SDK Web v2 di Duo per integrare i domini di Identity 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 riportato di seguito 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);
}
Una volta ricevuta la risposta per la sicurezza Duo, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.
Passo 5: Sottometti credenziali fattore
Questo passo sottomette le credenziali del fattore nel file requestState ricevute nella risposta del passo 3. Tenere presente che il payload della richiesta non contiene l'attributo authFactor perché requestState lo contiene. Il client deve includere i seguenti attributi:
op
: indica al server il tipo di operazione che il client desiderarequestState
: ricevuto nella risposta del passo 3
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali del 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 gli elementi che possono essere inviati come valore op
nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato createToken
.
Passo 6: Creare il token di autenticazione
op
: indica al server il tipo di operazione che il client desiderarequestState
: 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" }
Registrare un nuovo utente con sicurezza Duo mediante Web SDK v4
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API REST dei domini di Identity per registrare un nuovo utente e un dispositivo associato al kit SDK Web Duo v4.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia 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 di 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.
Per il caso d'uso, attenersi alla procedura riportata di seguito. Ogni passo contiene esempi di richieste e risposte:
- Passo 1: avviare il flusso di autenticazione
- Passo 2: Invia 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 con 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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 al 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 di sicurezza Duo, il browser esegue il reindirizzamento al server di sicurezza Duo, il server di sicurezza Duo 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 codice (duoSecurityAuthzCode). Per completare l'autenticazione, è necessario sottomettere questi parametri al dominio di Identity.
Per ottenere i parametri di stato e codice, attenersi alla procedura riportata di seguito.
-
Ottenere l'URL a cui eseguire il reindirizzamento 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>"
L'URL di reindirizzamento per
duoSecurityAuthzRedirectURL
. -
Eseguire il reindirizzamento 303 al server di sicurezza Duo.
-
Completare il processo di registrazione e autenticazione della sicurezza Duo.
Il server di sicurezza Duo esegue il reindirizzamento a
duoSecurityAuthzRedirectURL
conduoSecurityAuthzState
eduoSecurityAuthzCode
.
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 che il client desiderarequestState
: 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" }
Autenticare un account utente con sicurezza Duo mediante Web SDK v2
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per autenticare un account utente con Duo Web SDK v2.
Scaricare la raccolta di esempi di casi d'uso di 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 con 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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, nel passo successivo viene inviato credSubmit
.
Passo 3: avviare l'autenticazione di sicurezza Duo
Utilizzare l'SDK Web v2 di Duo per integrare i domini di Identity 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 riportato di seguito 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);
}
Una volta ricevuta la risposta per la sicurezza Duo, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.
Passo 4: Sottometti credenziali fattore
Questo passo sottomette le credenziali del fattore in requestState
ricevute nella risposta del passo 2. Tenere presente che il payload della richiesta non contiene l'attributo authFactor
perché requestState
lo contiene. Il client deve includere i seguenti attributi:
op
: indica al server il tipo di operazione che il client desiderarequestState
: ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali del 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"
}
Autenticare un account utente con sicurezza Duo mediante Web SDK v4
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per autenticare un account utente con Duo Web SDK v4.
Scaricare la raccolta di esempi di casi d'uso di 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 con 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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, nel passo successivo viene inviato credSubmit
.
Passo 3: avviare l'autenticazione di sicurezza Duo
Durante l'autenticazione di sicurezza Duo, il browser esegue il reindirizzamento al server di sicurezza Duo, il server di sicurezza Duo 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 codice (duoSecurityAuthzCode). Per completare l'autenticazione, è necessario sottomettere questi parametri al dominio di Identity.
Per ottenere i parametri di stato e codice, attenersi alla procedura riportata di seguito.
-
Ottenere l'URL a cui eseguire il reindirizzamento 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>"
L'URL di reindirizzamento per
duoSecurityAuthzRedirectURL
. -
Eseguire il reindirizzamento 303 al server di sicurezza Duo.
-
Completare il processo di registrazione e autenticazione della sicurezza Duo.
Il server di sicurezza Duo esegue il reindirizzamento a
duoSecurityAuthzRedirectURL
conduoSecurityAuthzState
eduoSecurityAuthzCode
.
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"
}
Autenticare un utente con sicurezza Duo se utilizzato come fattore di backup
Questo caso d'uso fornisce un esempio dettagliato dell'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 di 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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, nel passo successivo viene inviato getBackupFactors
.
Passo 3: ottenere l'elenco dei fattori di backup
Questo passo consente di ottenere la lista 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 4: Selezionare la sicurezza Duo dall'elenco dei fattori di backup
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
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 dell'utilizzo dell'API REST dei domini di Identity 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 ha già un fattore diverso dalla sicurezza Duo come preferito.
Scaricare la raccolta di esempi di casi d'uso di 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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, nel passo successivo viene inviato credSubmit
.
Passo 3: avviare l'autenticazione di sicurezza Duo
Utilizzare l'SDK Web v2 di Duo per integrare i domini di Identity 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 riportato di seguito 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);
}
Una volta ricevuta la risposta per la sicurezza Duo, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.
Passaggio 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 che il client desidera
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"
}
Supporto di un dispositivo trusted quando si utilizza Duo come fattore di autenticazione
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API REST dei domini di Identity per supportare il dispositivo sicuro quando si utilizza Duo come fattore di autenticazione.
Scaricare la raccolta di esempi di casi d'uso di 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 seguente 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}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a 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 il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, 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 che il client desidera
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, nel passo successivo viene inviato credSubmit
.
Passo 3: avviare l'autenticazione di sicurezza Duo
Utilizzare l'SDK Web v2 di Duo per integrare i domini di Identity 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 riportato di seguito 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);
}
Una volta ricevuta la risposta per la sicurezza Duo, è necessario passare la risposta ai domini di Identity per completare l'autenticazione.
Passaggio 4: abilitare un dispositivo come sicuro
Questo passo abilita un dispositivo come sicuro. Dopo che il dispositivo è stato accettato come sicuro, l'autenticazione MFA non verrà sottoposta a verifica anche se viene registrata la sicurezza Duo.
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 all'autenticazione MFA con sicurezza Duo mediante Self Service
Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API REST dei domini di Identity per la registrazione self-service all'autenticazione con più fattori (MFA) mediante la sicurezza Duo.
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 idm-samples GitHub, 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 Generating Access Token Using Authentication API.
In questi passi si presuppone che i fattori rilevanti dell'autenticazione MFA siano abilitati utilizzando Configura impostazioni di autenticazione con più fattori.
Step1: Registra un utente con fattore Duo
/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 seguente 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 inviando 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 seguente 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 chiama 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 è registrato per l'autenticazione MFA. L'attributo mfaPreferredAuthenticationFactor
indica il fattore impostato come metodo preferito. In questo caso, è THIRDPARTY
.