Duo Security mit Identitätsdomains verwenden

Aktualisieren der Einstellungen für den Authentifizierungsfaktor mit den Duo Security-Einstellungen

Das folgende Beispiel zeigt, wie Sie die Einstellungen für die Multifaktor-Authentifizierung für einen Mandanten aktualisieren, indem Sie eine PUT-Anforderung für die REST-Ressource über cURL weiterleiten. Weitere Informationen zu cURL finden Sie unter cURL verwenden.

cURL-Befehl

Hinweis

Der Befehl in diesem Beispiel verwendet die URL-Struktur https://<domainURL>/resource-path, wobei <domainURL> die Identity Service-URL darstellt und der Ressourcenpfad die Identity Service-API darstellt. Die entsprechende URL-Struktur finden Sie unter Anforderungen senden.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Anforderungsbody

Der folgende Abschnitt enthält ein Beispiel für den Anforderungstext im JSON-Format:
Beispielanforderungsbody
{
  "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"
}

Antwortbody

Das folgende Beispiel zeigt den Inhalt des Antworttextes im JSON-Format:

Beispielantworttext
{
    "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"
}

Duo Web SDK aktivieren v4

Das Duo-Web-SDK v2 (iFrame) ist standardmäßig in einer Identitätsdomain aktiviert. Um Duo Web SDK v4 zu verwenden, müssen Sie es aktivieren.

Verwenden Sie die folgenden Anweisungen, um Duo Web SDK v4 zu aktivieren.

  1. Mit cURL, GET /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings

    Antwortbeispiel

    Die folgenden Duo Web SDK v2-Einstellungen sollten angezeigt werden.

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
          "integrationKey": "<integration-key>",
          "secretKey": "<secret-key>",
          "apiHostname": "api-example.duosecurity.com",
          "userMappingAttribute": "userName"
    }
  2. Sichern Sie Ihre Instanz, falls ein Rollback erforderlich ist.
  3. Aktualisieren Sie die Payload aus Schritt 1, indem Sie im Abschnitt urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings enableWebSDKv4 und duoSecurityAuthzRedirectUrl hinzufügen.

    • enableWebSDKv4: Der Standardwert ist false. Wenn enableWebSDKv4 falsch ist, wird Duo Web SDK v2 verwendet.
    • duoSecurityAuthzRedirectUrl: Der Standardwert ist leer. Fügen Sie hier die URL Ihrer Organisation hinzu. Die Umleitungs-URL wird verwendet, um die Duo-Sicherheitsauthentifizierung zu initiieren, die eine Antwort vom Duo-Sicherheitsserver mit duoSecurityAuthzState und duoSecurityAuthzCode empfängt. Diese URL kann mit der benutzerdefinierten Benutzeroberfläche überschrieben werden. Die benutzerdefinierte Benutzeroberfläche muss diesen Endpunkt verwenden, um den Code und Parameter vom Duo Security Server zu empfangen.

    Beachten Sie, dass sich das folgende Attribut von v2 in v4 ändert.

    • client_id (integrationKey in v2)
    • clientSecret (secretKey in v2)
    • apiHostName (keine Änderung von v2)
    • userMappingAttribute (keine Änderung von v2)

    Anforderungsbeispiel

    "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
       "duoSecuritySettings": {
           "integrationKey": "<integration-key>",
           "secretKey": ""<secret-key>"",
           "apiHostname": "api-6ff7f509.duosecurity.com",
           "userMappingAttribute": "primaryEmail",
           "enableWebSDKv4": true,
           "duoSecurityAuthzRedirectUrl": "https://abc.co/a/c"
       }
    }
  4. Verwenden Sie cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings mit der Payload von Schritt 3.

Authentifizierung von Benutzername und Kennwort mit Duo Security als Authentifizierungsfaktor

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains, um Benutzer zu authentifizieren und eine Multifaktor-Registrierung und -Authentifizierung mit Duo Web SDK v2 oder Duo Web SDK v4 durchzuführen.

Hinweis

  • Verwenden Sie diese Authentifizierungs-API nur, wenn Sie Ihre eigene End-to-End-Anmeldeerfahrung erstellen, indem Sie eine benutzerdefinierte Anmeldeanwendung entwickeln, die von Identitätsdomains verwendet werden soll.
  • Diese Authentifizierungs-API kann nicht zur Integration Ihrer Anwendungen mit Identitätsdomains für Single Sign-On-Zwecke verwendet werden.
Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

In diesem Anwendungsfall sind die folgenden Beispielsets enthalten:

Neuen Benutzer mit Duo Security über das Web-SDK registrieren v2

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains, um einen neuen Benutzer und ein verknüpftes Gerät bei Duo Web SDK v2 zu registrieren.

Hinweis

  • Verwenden Sie diese Authentifizierungs-API nur, wenn Sie Ihre eigene End-to-End-Anmeldeerfahrung erstellen, indem Sie eine benutzerdefinierte Anmeldeanwendung entwickeln, die von Identitätsdomains verwendet werden soll.
  • Diese Authentifizierungs-API kann nicht zur Integration Ihrer Anwendungen mit Identitätsdomains für Single Sign-On-Zwecke verwendet werden.
Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Verwenden Sie die folgenden Schritte für den Anwendungsfall. Jeder Schritt enthält Anforderungs- und Antwortbeispiele:

Hinweis

Bei diesen Schritten wird davon ausgegangen, dass MFA aktiviert ist und eine Anmelde-Policy für MFA erstellt wird. Siehe Einstellungen für Multifaktor-Authentifizierung konfigurieren.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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 diesem Anwendungsbeispiel wird die Anmeldung im nächsten Schritt gesendet, um die Anmeldung für den Benutzer zu initiieren.

Schritt 3: Antrag auf Duo-Sicherheitsanmeldung initiieren

Dieser Schritt initiiert die Duo Security-Anmeldung. Der Client muss die folgenden Attribute enthalten:

  • op: Gibt dem Server an, welche Art von Vorgang der Client wünscht
  • authFactor: Definiert den Authentifizierungsfaktor, für den der Benutzer sich anmelden möchte
  • requestState: in der Schritt-2-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Anforderung im JSON-Format:

{
   "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}}"
}

In der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt credSubmit gesendet.

Schritt 4: Duo-Sicherheitsauthentifizierung initiieren

Verwenden Sie das Web-SDK v2 von Duo, um Identitätsdomains mit Duo Security zu integrieren. Duo bietet eine JavaScript-Bibliothek, die mit iFrame interagiert, die für die sekundäre Authentifizierung verwendet wird.

Nach der primären Authentifizierung müssen Sie die Authentifizierungsdetails wie duoSecurityHost und duoSecurityChallenge, die Sie von Identitätsdomains erhalten haben, an iFrame übergeben. Im folgenden Beispiel können Sie die Duo-Sicherheitsauthentifizierung initiieren und iFrame laden, um eine Verbindung mit dem Duo Security Server herzustellen.

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"
    });
}

Nach Abschluss des Duo-Authentifizierungsprozesses ruft Duo die Methode duoSecurityCallback auf, um eine Duo-Antwort zu erhalten.

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

Nach Erhalt der Antwort für Duo Security müssen Sie die Antwort an Identitätsdomains übergeben, um die Authentifizierung abzuschließen.

Schritt 5: Faktorzugangsdaten weiterleiten

Dieser Schritt leitet die Faktorzugangsdaten in der requestState weiter, die in der Schritt-3-Antwort empfangen wurden. Beachten Sie, dass die Anforderungs-Payload das Attribut authFactor nicht enthält, weil das Attribut requestState es enthält. Der Client muss die folgenden Attribute enthalten:

  • op: Gibt dem Server an, welche Art von Vorgang der Client wünscht
  • requestState: in der Schritt-3-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format, um die Factor-Zugangsdaten weiterzuleiten:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Die nextOp-Werte geben an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt createToken gesendet.

Schritt 6: Authentifizierungstoken erstellen

Dieser Schritt gibt an, dass der Client abgeschlossen ist und eine Session erstellt werden muss. Der Server validiert, ob keine andere Faktorauswertung erforderlich ist (je nachdem, was für die Policy definiert ist), und antwortet mit dem Token oder verweigert den Zugriff. Der Client muss die folgenden Attribute enthalten:
  • op: Gibt dem Server an, welche Art von Vorgang der Client wünscht
  • requestState: in der Schritt-5-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Neuen Benutzer mit Duo Security über das Web-SDK registrieren v4

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains, um einen neuen Benutzer und ein verknüpftes Gerät bei Duo Web SDK v4 zu registrieren.

Hinweis

Wenn Sie das Duo-Web-SDK v4 aktivieren müssen, finden Sie weitere Informationen unter Duo-Web-SDK aktivieren v4.
Hinweis

  • Verwenden Sie diese Authentifizierungs-API nur, wenn Sie Ihre eigene End-to-End-Anmeldeerfahrung erstellen, indem Sie eine benutzerdefinierte Anmeldeanwendung entwickeln, die von Identitätsdomains verwendet werden soll.
  • Diese Authentifizierungs-API kann nicht zur Integration Ihrer Anwendungen mit Identitätsdomains für Single Sign-On-Zwecke verwendet werden.
Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Verwenden Sie die folgenden Schritte für den Anwendungsfall. Jeder Schritt enthält Anforderungs- und Antwortbeispiele:

Hinweis

Bei diesen Schritten wird davon ausgegangen, dass MFA aktiviert ist und eine Anmelde-Policy für MFA erstellt wird. Siehe Einstellungen für Multifaktor-Authentifizierung konfigurieren.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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 diesem Anwendungsbeispiel wird die Anmeldung im nächsten Schritt gesendet, um die Anmeldung für den Benutzer zu initiieren.

Schritt 3: Antrag auf Duo-Sicherheitsanmeldung initiieren

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Anforderung im JSON-Format.

{
   "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
   }
}

Schritt 4: Duo-Sicherheitsauthentifizierung initiieren

Während der Duo Security-Authentifizierung leitet der Browser zum Duo Security Server um, dann lädt der Duo Security Server die sekundäre Authentifizierungsseite, auf der der Benutzer die sekundäre Authentifizierung ausführt. Nach erfolgreicher Authentifizierung antwortet der Duo Security Server mit den Status- (duoSecurityAuthzState) und Code-Parametern (duoSecurityAuthzCode). Diese Parameter müssen an die Identitätsdomain weitergeleitet werden, um die Authentifizierung abzuschließen.

Führen Sie die folgenden Schritte aus, um die Status- und Codeparameter abzurufen:

  1. Rufen Sie die URL ab, zu der von duoSecurityAuthzRequest umgeleitet werden soll.

    Beispiel:
    "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>"

    Die Redirect-URL für duoSecurityAuthzRedirectURL.

  2. Führen Sie die 303-Umleitung zum Duo Security Server durch.

  3. Schließen Sie den Anmelde- und Authentifizierungsprozess von Duo Security ab.

    Der Duo Security Server leitet mit duoSecurityAuthzState und duoSecurityAuthzCode zurück zu duoSecurityAuthzRedirectURL.

Schritt 5: Faktorzugangsdaten weiterleiten

Übergeben Sie duoSecurityAuthzState und duoSecurityAuthzCode von der Antwort an die Identitätsdomain, um die Authentifizierung abzuschließen.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der Anforderung im JSON-Format:

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

Antwortbeispiel

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

Schritt 6: Authentifizierungstoken erstellen

Dieser Schritt gibt an, dass der Client abgeschlossen ist und eine Session erstellt werden muss. Der Server validiert, ob keine andere Faktorauswertung erforderlich ist (je nachdem, was für die Policy definiert ist), und antwortet mit dem Token oder verweigert den Zugriff. Der Client muss die folgenden Attribute enthalten:
  • op: Gibt dem Server an, welche Art von Vorgang der Client wünscht
  • requestState: in der Schritt-5-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Benutzeraccount mit Duo Security mit Web SDK v2 authentifizieren

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der Authentifizierungs-API für Identitätsdomains zur Authentifizierung eines Benutzeraccounts bei Duo Web SDK v2.

Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.
Hinweis

Bei diesen Schritten wird davon ausgegangen, dass MFA aktiviert ist und eine Anmelde-Policy für MFA erstellt wird. Siehe Einstellungen für Multifaktor-Authentifizierung konfigurieren

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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 der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt credSubmit gesendet.

Schritt 3: Duo-Sicherheitsauthentifizierung initiieren

Verwenden Sie das Web-SDK v2 von Duo, um Identitätsdomains mit Duo Security zu integrieren. Duo bietet eine JavaScript-Bibliothek, die mit iFrame interagiert, die für die sekundäre Authentifizierung verwendet wird.

Nach der primären Authentifizierung müssen Sie die Authentifizierungsdetails wie duoSecurityHost und duoSecurityChallenge, die Sie von Identitätsdomains erhalten haben, an iFrame übergeben. Im folgenden Beispiel können Sie die Duo-Sicherheitsauthentifizierung initiieren und iFrame laden, um eine Verbindung mit dem Duo Security Server herzustellen.

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"
    });
}

Nach Abschluss des Duo-Authentifizierungsprozesses ruft Duo die Methode duoSecurityCallback auf, um eine Duo-Antwort zu erhalten.

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

Nach Erhalt der Antwort für Duo Security müssen Sie die Antwort an Identitätsdomains übergeben, um die Authentifizierung abzuschließen.

Schritt 4: Faktorzugangsdaten weiterleiten

Dieser Schritt leitet die Faktorzugangsdaten in der requestState weiter, die in der Schritt-2-Antwort empfangen wurden. Beachten Sie, dass die Anforderungs-Payload das Attribut authFactor nicht enthält, weil das Attribut requestState es enthält. Der Client muss die folgenden Attribute enthalten:

  • op: Gibt dem Server an, welche Art von Vorgang der Client wünscht
  • requestState: in der Schritt-2-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format, um die Factor-Zugangsdaten weiterzuleiten:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Benutzeraccount mit Duo Security mit Web SDK v4 authentifizieren

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der Authentifizierungs-API für Identitätsdomains zur Authentifizierung eines Benutzeraccounts bei Duo Web SDK v4.

Hinweis

Wenn Sie das Duo-Web-SDK v4 aktivieren müssen, finden Sie weitere Informationen unter Duo-Web-SDK aktivieren v4.
Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.
Hinweis

Bei diesen Schritten wird davon ausgegangen, dass MFA aktiviert ist und eine Anmelde-Policy für MFA erstellt wird. Siehe Einstellungen für Multifaktor-Authentifizierung konfigurieren.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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 der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt credSubmit gesendet.

Schritt 3: Duo-Sicherheitsauthentifizierung initiieren

Während der Duo Security-Authentifizierung leitet der Browser zum Duo Security Server um, dann lädt der Duo Security Server die sekundäre Authentifizierungsseite, auf der der Benutzer die sekundäre Authentifizierung ausführt. Nach erfolgreicher Authentifizierung antwortet der Duo Security Server mit den Status- (duoSecurityAuthzState) und Code-Parametern (duoSecurityAuthzCode). Diese Parameter müssen an die Identitätsdomain weitergeleitet werden, um die Authentifizierung abzuschließen.

Führen Sie die folgenden Schritte aus, um die Status- und Codeparameter abzurufen:

  1. Rufen Sie die URL ab, zu der von duoSecurityAuthzRequest umgeleitet werden soll.

    Beispiel:
    "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>"

    Die Redirect-URL für duoSecurityAuthzRedirectURL.

  2. Führen Sie die 303-Umleitung zum Duo Security Server durch.

  3. Schließen Sie den Anmelde- und Authentifizierungsprozess von Duo Security ab.

    Der Duo Security Server leitet mit duoSecurityAuthzState und duoSecurityAuthzCode zurück zu duoSecurityAuthzRedirectURL.

Schritt 4: Faktorzugangsdaten weiterleiten

Übergeben Sie duoSecurityAuthzState und duoSecurityAuthzCode von der Antwort an die Identitätsdomain, um die Authentifizierung abzuschließen.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der Anforderung im JSON-Format:

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

Antwortbeispiel

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

Benutzer mit Duo Security authentifizieren, wenn sie als Backup-Faktor verwendet werden

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains, um einen Benutzeraccount bei Duo Security zu authentifizieren, auch wenn er als Backupfaktor konfiguriert ist.

Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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 der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt getBackupFactors gesendet.

Schritt 3: Liste der Backupfaktoren abrufen

Mit diesem Schritt können Sie die Liste der Backupfaktoren abrufen.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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
    }
}

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 4: Wählen Sie Duo Security aus der Liste der Backup-Faktoren

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:
  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
	"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
	}
}

Duo Security als bevorzugten Faktor festlegen

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains, um Duo Security als bevorzugten Faktor für die Authentifizierung festzulegen.

Sie können das Flag preferred auf true setzen, um Duo Security als bevorzugten Faktor zu verwenden, wenn ein Benutzer bereits einen anderen Faktor als Duo Security als bevorzugten Faktor hat.

Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
   "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
    }
}

In der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt credSubmit gesendet.

Schritt 3: Duo-Sicherheitsauthentifizierung initiieren

Verwenden Sie das Web-SDK v2 von Duo, um Identitätsdomains mit Duo Security zu integrieren. Duo bietet eine JavaScript-Bibliothek, die mit iFrame interagiert, die für die sekundäre Authentifizierung verwendet wird.

Nach der primären Authentifizierung müssen Sie die Authentifizierungsdetails wie duoSecurityHost und duoSecurityChallenge, die Sie von Identitätsdomains erhalten haben, an iFrame übergeben. Im folgenden Beispiel können Sie die Duo-Sicherheitsauthentifizierung initiieren und iFrame laden, um eine Verbindung mit dem Duo Security Server herzustellen.

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"
    });
}

Nach Abschluss des Duo-Authentifizierungsprozesses ruft Duo die Methode duoSecurityCallback auf, um eine Duo-Antwort zu erhalten.

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

Nach Erhalt der Antwort für Duo Security müssen Sie die Antwort an Identitätsdomains übergeben, um die Authentifizierung abzuschließen.

Schritt 4: Duo Security als bevorzugten Faktor aktivieren

Dieser Schritt ermöglicht Duo Security als bevorzugten Faktor. Für diesen Schritt muss der Client die folgenden Attribute enthalten:
  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Vertrauenswürdiges Gerät bei Verwendung von Duo als Authentifizierungsfaktor unterstützen

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains zur Unterstützung vertrauenswürdiger Geräte, wenn Duo als Authentifizierungsfaktor verwendet wird.

Tipp

Laden Sie die Collection der Anwendungsbeispiele für die Identitätsdomainauthentifizierung und die globale Variablendatei aus dem Ordner idcs-authn-api-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Schritt 1: Authentifizierungsablauf starten

Rufen Sie das anfängliche requestState ab, um den Authentifizierungsablauf zu starten.

Anforderungsbeispiel

Das folgende Beispiel zeigt die Anforderung im cURL-Format:

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

Die Option appName ist optional. Die appName ist der Name der App, auf die der Client zugreifen möchte. Wenn eine appName bereitgestellt wird, werden für die App spezifische Anmelde-Policys verarbeitet, und der Client wird basierend auf dieser Policy für die erforderlichen Faktoren herausgefordert.

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

In der Antwort gibt der Wert nextOp an, was in der nächsten Anforderung als op-Wert gesendet werden kann. In diesem Anwendungsfallbeispiel sollte credSubmit im nächsten Schritt gesendet werden. Die requestState enthält kontextbezogene Daten, die zur Verarbeitung der Anforderung erforderlich sind.

Schritt 2: Zugangsdaten des Benutzers weiterleiten

Leiten Sie die Zugangsdaten des Benutzers als ersten Faktor weiter. Hierbei handelt es sich um den Benutzernamen und das Kennwort. Für diesen Schritt muss der Client die folgenden Attribute enthalten:

  • credentials: Benutzername und Kennwort

  • requestState: in der Schritt-1-Antwort empfangen

  • op: teilt dem Server mit, welche Art von Vorgang der Client wünscht

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
   "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
    }
}

In der Antwort geben die nextOp-Werte an, was als Operationswert in der nächsten Anforderung gesendet werden kann. In diesem Anwendungsbeispiel wird im nächsten Schritt credSubmit gesendet.

Schritt 3: Duo-Sicherheitsauthentifizierung initiieren

Verwenden Sie das Web-SDK v2 von Duo, um Identitätsdomains mit Duo Security zu integrieren. Duo bietet eine JavaScript-Bibliothek, die mit iFrame interagiert, die für die sekundäre Authentifizierung verwendet wird.

Nach der primären Authentifizierung müssen Sie die Authentifizierungsdetails wie duoSecurityHost und duoSecurityChallenge, die Sie von Identitätsdomains erhalten haben, an iFrame übergeben. Im folgenden Beispiel können Sie die Duo-Sicherheitsauthentifizierung initiieren und iFrame laden, um eine Verbindung mit dem Duo Security Server herzustellen.

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"
    });
}

Nach Abschluss des Duo-Authentifizierungsprozesses ruft Duo die Methode duoSecurityCallback auf, um eine Duo-Antwort zu erhalten.

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

Nach Erhalt der Antwort für Duo Security müssen Sie die Antwort an Identitätsdomains übergeben, um die Authentifizierung abzuschließen.

Schritt 4: Gerät als vertrauenswürdig aktivieren

Dieser Schritt aktiviert ein Gerät als vertrauenswürdig. Nachdem das Gerät vertrauenswürdig ist, wird MFA nicht mehr herausgefordert, obwohl Duo Security registriert ist.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

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

Mit Selfservice bei MFA mit Duo Security anmelden

Dieser Anwendungsfall enthält ein schrittweises Beispiel für die Verwendung der REST-API für Identitätsdomains zur Selfservice-Registrierung bei der Multifaktor-Authentifizierung (MFA) mit Duo Security.

Laden Sie die Collection der Anwendungsbeispiele für die Authentifizierung von Identitätsdomains und die globale Variablendatei aus dem Ordner idcs-rest-clients im Repository idm-samples GitHub herunter, und importieren Sie sie dann in Postman.

Als Voraussetzung müssen Sie ein ME-Token abrufen, bevor Sie diese Schritte ausführen. Informationen zum Abrufen eines ME-Tokens finden Sie unter Zugriffstoken mit Authentifizierungs-API generieren.

Hinweis

Bei diesen Schritten wird davon ausgegangen, dass relevante Faktoren von MFA mit Einstellungen für die Multifaktor-Authentifizierung konfigurieren aktiviert sind.

Step1: Benutzer mit Duo Factor registrieren

Dieser Schritt initiiert die Duo Security-Registrierung für eine POST-Anforderung an den Endpunkt /admin/v1/MyAuthenticationFactorEnroller. Der Client muss das folgende Attribut enthalten:
  • value: Definiert die Benutzer-ID. Sie können einen GET-Aufruf an {{HOST}}/admin/v1/Me durchführen, um den Wert "id" abzurufen.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt des POST-Anforderungstextes im JSON-Format:

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

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt des Antworttextes im JSON-Format:

{
    "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"
}

In der Antwort müssen deviceId und requestId im nächsten Schritt übergeben werden.

Schritt 2: Duo-Authentifizierung für den Benutzer initiieren

Dieser Schritt initiiert die Authentifizierung auf der Drittanbieterseite, indem eine POST-Anforderung an den Endpunkt /admin/v1/MyAuthenticationFactorInitiator weitergeleitet wird. Der Client muss die folgenden Attribute enthalten:

  • requestId: in der Schritt-1-Antwort empfangen
  • deviceId: in der Schritt-1-Antwort empfangen
  • userName:-Benutzername des Benutzers.

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt des POST-Anforderungstextes im JSON-Format:

{
    "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"
    ]
}

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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"
        }
    ]
}

In der Antwort müssen deviceId und requestId im nächsten Schritt übergeben werden.

Schritt 3: Duo-Faktor für Anmeldungsszenario validieren

Dieser Schritt ruft die Drittanbieter-Faktor-API mit erfassten Zugangsdaten auf, um die Registrierung eines Benutzers in einer POST-Anforderung beim Endpunkt /admin/v1/MyAuthenticationFactorValidator zu validieren.

Der Client muss die folgenden Attribute enthalten:

  • requestId: in der Schritt-2-Antwort empfangen
  • deviceId: in der Schritt-2-Antwort empfangen

Anforderungsbeispiel

Das folgende Beispiel zeigt den Inhalt der POST-Anforderung im JSON-Format:

{
    "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"
        }
    ]
}

Antwortbeispiel

Das folgende Beispiel zeigt den Inhalt der Antwort im JSON-Format:

{
    "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
}

In der Antwort gibt das Attribut mfaStatus:"ENROLLED" an, dass sich der Benutzer für MFA registriert hat. Das Attribut mfaPreferredAuthenticationFactor gibt den Faktor an, der als bevorzugte Methode festgelegt ist. In diesem Fall ist es THIRDPARTY.