Utiliser Duo Security avec des domaines d'identité
Ces cas d'utilisation fournissent un exemple étape par étape de l'utilisation du kit SDK Web Duo v2 ou du kit SDK Web Duo v4 avec un domaine d'identité.
Mise à jour des paramètres du facteur d'authentification avec les paramètres de sécurité Duo
L'exemple suivant montre comment mettre à jour les paramètres d'authentification multifacteur pour un locataire en soumettant une demande PUT sur la ressource REST à l'aide de cURL. Pour plus d'informations sur cURL, reportez-vous à Utilisation de cURL.
Commande cURL
Dans cet exemple, la commande utilise la structure d'URL
https://<domainURL>/resource-path, où <domainURL> représente l'URL du service d'identité et le chemin de ressource représente l'API du service d'identité. Pour connaître la structure d'URL appropriée à utiliser, reportez-vous à Envoyer des demandes. curl
-X PUT
-H "Content-Type:application/scim+json"
-H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>
Corps de demande
{
"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"
}Corps de la réponse
L'exemple suivant montre le contenu du corps de réponse au format 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"
}Activation du kit SDK Web Duo v4
Le kit SDK Web Duo v2 (iFrame) est activé par défaut dans un domaine d'identité. Pour utiliser Duo Web SDK v4, vous devez l'activer.
Utilisez les instructions suivantes pour activer Duo Web SDK v4.
-
En utilisant cURL,
GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsExemple de réponse
Vous devez voir les paramètres Duo Web SDK v2 suivants.
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": { "duoSecuritySettings": { "integrationKey": "<integration-key>", "secretKey": "<secret-key>", "apiHostname": "api-example.duosecurity.com", "userMappingAttribute": "userName" } - Sauvegardez votre instance au cas où l'annulation serait nécessaire.
-
Mettez à jour la charge utile de l'étape 1 en ajoutant
enableWebSDKv4etduoSecurityAuthzRedirectUrlsous la sectionurn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.enableWebSDKv4: la valeur par défaut estfalse. SienableWebSDKv4a la valeur False, Duo Web SDK v2 est utilisé.-
duoSecurityAuthzRedirectUrl: la valeur par défaut est vide. Ajoutez l'URL de votre organisation ici. L'URL de réacheminement est utilisée pour lancer l'authentification de sécurité Duo, qui reçoit une réponse du serveur de sécurité Duo avec les élémentsduoSecurityAuthzStateetduoSecurityAuthzCode. Cette URL peut être remplacée à l'aide de l'interface utilisateur personnalisée. L'interface utilisateur personnalisée doit utiliser cette adresse pour recevoir le code et le paramètre du serveur Duo Security.
L'attribut suivant passe de v2 à v4.
client_id(integrationKeydans v2)clientSecret(secretKeydans v2)apiHostName(aucune modification par rapport à v2)userMappingAttribute(aucune modification par rapport à v2)
Exemple de demande
"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" } } -
A l'aide de cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsutilise la charge utile de l'étape 3.
Authentification du nom utilisateur et du mot de passe avec Duo Security en tant que facteur d'authentification
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour authentifier les utilisateurs et effectuer une inscription et une authentification multifacteurs avec Duo Web SDK v2 ou Duo Web SDK v4.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Les exemples de jeux suivants sont inclus dans ce cas d'utilisation :
-
Inscrire un nouvel utilisateur à Duo Security à l'aide du kit SDK Web v2
-
Inscrire un nouvel utilisateur à Duo Security à l'aide du kit SDK Web v4
-
Authentifier un compte utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v2
-
Authentifier un compte utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v4
Inscrire un nouvel utilisateur à Duo Security à l'aide du kit SDK Web v2
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour inscrire un nouvel utilisateur et un appareil associé au kit SDK Web Duo v2.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Suivez les étapes ci-dessous pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :
- Etape 1 : lancement du flux d'authentification
- Etape 2 : soumission des informations d'identification de l'utilisateur
- Etape 3 : Lancer une demande d'inscription à la sécurité Duo
- Etape 4 : Lancer l'authentification de sécurité Duo
- Etape 5 : Soumettre les informations d'identification du facteur
- Etape 6 : création du jeton d'authentification
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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}}"
}
Dans cet exemple de cas d'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.
Etape 3 : Lancer une demande d'inscription à la sécurité Duo
Cette étape lance l'inscription Duo Security. Le client doit inclure les attributs suivants :
op: indique au serveur le type d'opération souhaité par le clientauthFactor: définit le facteur d'authentification auquel l'utilisateur souhaite s'inscrire.requestState: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "enrollment",
"authFactor": "DUO_SECURITY",
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la demande au format 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}}"
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit est envoyé à l'étape suivante.
Etape 4 : Lancer l'authentification de sécurité Duo
Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est utilisé pour l'authentification secondaire.
Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité 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"
});
}
Une fois le processus d'authentification Duo terminé, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Ensuite, lors de la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.
Etape 5 : Soumettre les informations d'identification du facteur
Cette étape soumet les informations d'identification de facteur dans le fichier requestState qui ont été reçues dans la réponse d'étape 3. La charge utile de demande ne contient pas l'attribut authFactor car requestState le contient. Le client doit inclure les attributs suivants :
op: indique au serveur le type d'opération souhaité par le clientrequestState: reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :
{
"op":"credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
|f2d0df2a189219a8e85db190ac66fab33be996c3:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
|a3b7c901e845ebd80451ab670473e983707a8459"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, createToken est envoyé à l'étape suivante.
Etape 6 : création du jeton d'authentification
op: indique au serveur le type d'opération souhaité par le clientrequestState: reçu dans la réponse de l'étape 5
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{ "authnToken": "{{authnToken}}", "status": "success" }
Inscrire un nouvel utilisateur à Duo Security à l'aide du kit SDK Web v4
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour inscrire un nouvel utilisateur et un appareil associé au kit SDK Web Duo v4.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Suivez les étapes ci-dessous pour le cas d'emploi. Chaque étape contient des exemples de demande et de réponse :
- Etape 1 : lancement du flux d'authentification
- Etape 2 : soumission des informations d'identification de l'utilisateur
- Etape 3 : Lancer une demande d'inscription à la sécurité Duo
- Etape 4 : Lancer l'authentification de sécurité Duo
- Etape 5 : Soumettre les informations d'identification du facteur
- Etape 6 : création du jeton d'authentification
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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}}"
}
Dans cet exemple de cas d'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription de l'utilisateur.
Etape 3 : Lancer une demande d'inscription à la sécurité Duo
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "enrollment",
"authFactor": "DUO_SECURITY",
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la demande au format 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
}
}
Etape 4 : Lancer l'authentification de sécurité Duo
Pendant l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, puis le serveur Duo Security charge la page d'authentification secondaire où l'utilisateur effectue l'authentification secondaire. Une fois l'authentification réussie, le serveur Duo Security répond avec les paramètres d'état (duoSecurityAuthzState) et de code (duoSecurityAuthzCode). Ces paramètres doivent être soumis au domaine d'identité pour terminer l'authentification.
Pour obtenir les paramètres d'état et de code, procédez comme suit :
-
Obtenez l'URL vers laquelle rediriger à partir de
duoSecurityAuthzRequest.Par exemple :"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>"Il s'agit de l'URL de réacheminement pour
duoSecurityAuthzRedirectURL. -
Effectuez la redirection 303 vers le serveur Duo Security.
-
Effectuez le processus d'inscription et d'authentification Duo Security.
Le serveur Duo Security redirige vers
duoSecurityAuthzRedirectURLavecduoSecurityAuthzStateetduoSecurityAuthzCode.
Etape 5 : Soumettre les informations d'identification du facteur
Transmettez duoSecurityAuthzState et duoSecurityAuthzCode de la réponse au domaine d'identité pour terminer l'authentification.
Exemple de demande
L'exemple suivant montre le contenu de la demande au format JSON :
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Exemple de réponse
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Etape 6 : création du jeton d'authentification
op: indique au serveur le type d'opération souhaité par le clientrequestState: reçu dans la réponse de l'étape 5
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{ "authnToken": "{{authnToken}}", "status": "success" }
Authentifier un compte utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v2
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour authentifier un compte utilisateur avec Duo Web SDK v2.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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}}"
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit est envoyé à l'étape suivante.
Etape 3 : Lancer l'authentification de sécurité Duo
Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est utilisé pour l'authentification secondaire.
Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité 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"
});
}
Une fois le processus d'authentification Duo terminé, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Ensuite, lors de la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.
Etape 4 : Soumettre les informations d'identification du facteur
Cette étape soumet les informations d'identification de facteur dans le fichier requestState qui ont été reçues dans la réponse d'étape 2. La charge utile de demande ne contient pas l'attribut authFactor car requestState le contient. Le client doit inclure les attributs suivants :
op: indique au serveur le type d'opération souhaité par le clientrequestState: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :
{
"op":"credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
|f2d0df2a189219a8e85db190ac66fab33be996c3:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
|a3b7c901e845ebd80451ab670473e983707a8459"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Authentifier un compte utilisateur à l'aide de Duo Security à l'aide du kit SDK Web v4
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour authentifier un compte utilisateur avec Duo Web SDK v4.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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}}"
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit est envoyé à l'étape suivante.
Etape 3 : Lancer l'authentification de sécurité Duo
Pendant l'authentification Duo Security, le navigateur redirige vers le serveur Duo Security, puis le serveur Duo Security charge la page d'authentification secondaire où l'utilisateur effectue l'authentification secondaire. Une fois l'authentification réussie, le serveur Duo Security répond avec les paramètres d'état (duoSecurityAuthzState) et de code (duoSecurityAuthzCode). Ces paramètres doivent être soumis au domaine d'identité pour terminer l'authentification.
Pour obtenir les paramètres d'état et de code, procédez comme suit :
-
Obtenez l'URL vers laquelle rediriger à partir de
duoSecurityAuthzRequest.Par exemple :"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>"Il s'agit de l'URL de réacheminement pour
duoSecurityAuthzRedirectURL. -
Effectuez la redirection 303 vers le serveur Duo Security.
-
Effectuez le processus d'inscription et d'authentification Duo Security.
Le serveur Duo Security redirige vers
duoSecurityAuthzRedirectURLavecduoSecurityAuthzStateetduoSecurityAuthzCode.
Etape 4 : Soumettre les informations d'identification du facteur
Transmettez duoSecurityAuthzState et duoSecurityAuthzCode de la réponse au domaine d'identité pour terminer l'authentification.
Exemple de demande
L'exemple suivant montre le contenu de la demande au format JSON :
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Exemple de réponse
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Authentification d'un utilisateur avec Duo Security lorsqu'il est utilisé comme facteur de sauvegarde
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour authentifier un compte utilisateur auprès de Duo Security, même lorsqu'il est configuré en tant que facteur de sauvegarde.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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}}"
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, getBackupFactors est envoyé à l'étape suivante.
Etape 3 : Obtention de la liste des facteurs de sauvegarde
Cette étape vous permet d'obtenir la liste des facteurs de sauvegarde.
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "getBackupFactors",
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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
}
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 4 : Sélectionnez Duo Security dans la liste des facteurs de sauvegarde
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"authFactor": "DUO_SECURITY",
"credentials": {
"deviceId": "3053eed6249a4dd4835c51bf873c5f85"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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
}
}
Définir Duo Security comme facteur préféré
Ce cas d'utilisation fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour définir Duo Security comme facteur préféré pour l'authentification.
Vous pouvez définir l'indicateur preferred sur true pour définir Duo Security comme facteur préféré, si un utilisateur a déjà un autre facteur que Duo Security comme facteur préféré.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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
}
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit est envoyé à l'étape suivante.
Etape 3 : Lancer l'authentification de sécurité Duo
Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est utilisé pour l'authentification secondaire.
Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité 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"
});
}
Une fois le processus d'authentification Duo terminé, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Ensuite, lors de la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.
Etape 4 : Activer la sécurité Duo en tant que facteur préféré
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQzMzg=
|4a40cc9c79d4a65b48d0f9b871d7a4e83481b3ca:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
|af94d927d3e027141177e8f88baa19f6427502ee",
"preferred": true
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41r0000000000"
}
Prise en charge des périphériques sécurisés lors de l'utilisation de Duo en tant que facteur d'authentification
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour prendre en charge les périphériques sécurisés lors de l'utilisation de Duo comme facteur d'authentification.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre la demande au format 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 est facultatif. appName est le nom de l'application à laquelle le client souhaite accéder. Si une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp indique ce qui peut être envoyé en tant que valeur op dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit doit être envoyé à l'étape suivante. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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
}
}
Dans la réponse, les valeurs nextOp indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit est envoyé à l'étape suivante.
Etape 3 : Lancer l'authentification de sécurité Duo
Utilisez le kit SDK Web v2 de Duo pour intégrer des domaines d'identité à Duo Security. Duo offre une bibliothèque JavaScript qui interagit avec iFrame qui est utilisé pour l'authentification secondaire.
Après l'authentification principale, vous devez transmettre les détails d'authentification tels que duoSecurityHost et duoSecurityChallenge que vous avez reçus des domaines d'identité à iFrame. Vous pouvez utiliser l'exemple suivant pour lancer l'authentification de sécurité Duo et charger iFrame pour établir une connexion avec le serveur de sécurité 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"
});
}
Une fois le processus d'authentification Duo terminé, Duo appelle la méthode duoSecurityCallback pour obtenir une réponse Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Ensuite, lors de la réception de la réponse pour Duo Security, vous devez transmettre la réponse aux domaines d'identité pour terminer l'authentification.
Etape 4 : activation d'un périphérique de confiance
Cette étape active un périphérique de confiance. Une fois l'appareil sécurisé, l'authentification à plusieurs facteurs n'est plus contestée même si Duo Security est inscrit.
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ2MDY=
|ba16e2eb734e00d9ebe6f8129ce32669437052e9:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjgwNjc=
|ba4f415559ff2c30b23a912a18ee5f717a398563"
},
"trustedDevice": true,
"trustedDeviceDisplayName": "Postman on Windows",
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"trustToken": "{{trustToken}}",
"status": "success",
"ecId": "5MyZ41u0000000000"
}
Inscription à l'authentification à plusieurs facteurs avec Duo Security à l'aide du libre-service
Ce cas d'emploi fournit un exemple détaillé de l'utilisation de l'API REST des domaines d'identité pour l'inscription en libre-service à l'authentification multifacteur à l'aide de Duo Security.
Téléchargez la collection d'exemples d'utilisation de l'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Comme étape préalable, vous devez obtenir un jeton ME avant de suivre ces étapes. Pour plus d'informations sur l'obtention d'un jeton ME, reportez-vous à Génération de jeton d'accès à l'aide de l'API d'authentification.
Ces étapes supposent que les facteurs pertinents de l'authentification à plusieurs facteurs sont activés à l'aide de Configurer les paramètres d'authentification à plusieurs facteurs.
Step1 : inscrire un utilisateur au facteur Duo
/admin/v1/MyAuthenticationFactorEnroller. Le client doit inclure l'attribut suivant : value: définit l'ID utilisateur. Vous pouvez effectuer un appel GET vers{{HOST}}/admin/v1/Mepour obtenir la valeur "id".
Exemple de demande
L'exemple suivant montre le contenu du corps de la demande POST au format JSON :
{
"authnFactors":["THIRDPARTY"],
"thirdPartyFactor": {
"thirdPartyVendorName" : "DUO_SECURITY",
"thirdPartyFactorType" : "None"
},
"user": {
"value" : "012832e2e63d4bfda5bc512f2b52ccbe"
},
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
]
}
Exemple de réponse
L'exemple suivant montre le contenu du corps de réponse au format 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"
}
Dans la réponse, deviceId et requestId doivent être transmis à l'étape suivante.
Etape 2 : Lancer l'authentification Duo pour l'utilisateur
Cette étape lance l'authentification côté tiers en soumettant une demande POST à l'adresse /admin/v1/MyAuthenticationFactorInitiator. Le client doit inclure les attributs suivants :
requestId:reçu dans la réponse d'étape 1deviceId:reçu dans la réponse d'étape 1- Nom utilisateur
userName:de l'utilisateur
Exemple de demande
L'exemple suivant montre le contenu du corps de la demande POST au format 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"
]
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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"
}
]
}
Dans la réponse, deviceId et requestId doivent être transmis à l'étape suivante.
Etape 3 : Valider le facteur de duo pour le scénario d'inscription
Cette étape appelle l'API de facteur tiers avec les informations d'identification collectées pour valider l'inscription d'un utilisateur à une demande POST vers l'adresse /admin/v1/MyAuthenticationFactorValidator.
Le client doit inclure les attributs suivants :
-
requestId:reçu dans la réponse d'étape 2 deviceId:reçu dans la réponse d'étape 2
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format 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"
}
]
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format 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
}
Dans la réponse, l'attribut mfaStatus:"ENROLLED" indique que l'utilisateur s'est inscrit à l'authentification à plusieurs facteurs. L'attribut mfaPreferredAuthenticationFactor indique l'ensemble de facteurs comme méthode préférée. Dans ce cas, il s'agit de THIRDPARTY.