Usando a Segurança Duo com Domínios de Identidades

Atualizando as Definições do Fator de Autenticação com as Definições de Segurança Duo

O exemplo a seguir mostra como atualizar as definições de Autenticação Multifator para um tenant enviando uma solicitação PUT no recurso REST usando cURL. Para obter mais informações sobre a cURL, consulte Usar cURL.

Comando cURL

Observação

O comando neste exemplo usa a estrutura de URL https://<domainURL>/resource-path, na qual <domainURL> representa o URL do Serviço de Identidade e o caminho do recurso representa a API do Serviço de Identidade. Consulte Enviar Solicitações para obter a estrutura de URL apropriada a ser usada.
   curl
-X PUT
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>

Corpo da Solicitação

O exemplo a seguir mostra um exemplo do corpo de solicitação no formato JSON:
Exemplo de Corpo da Solicitação
{
  "bypassCodeSettings": {
    "helpDeskCodeExpiryInMins": 60,
    "helpDeskGenerationEnabled": true,
    "helpDeskMaxUsage": 5,
    "length": 12,
    "maxActive": 5,
    "selfServiceGenerationEnabled": true
  },
  "clientAppSettings": {
    "deviceProtectionPolicy": "NONE",
    "initialLockoutPeriodInSecs": 30,
    "keyPairLength": 2048,
    "lockoutEscalationPattern": "Constant",
    "maxFailuresBeforeLockout": 10,
    "maxFailuresBeforeWarning": 5,
    "maxLockoutIntervalInSecs": 86400,
    "minPinLength": 6,
    "policyUpdateFreqInDays": 7,
    "requestSigningAlgo": "SHA256withRSA",
    "sharedSecretEncoding": "Base32",
    "unlockAppForEachRequestEnabled": false,
    "unlockAppIntervalInSecs": 300,
    "unlockOnAppForegroundEnabled": false,
    "unlockOnAppStartEnabled": false
  },
  "compliancePolicy": [
    {
      "action": "Allow",
      "name": "lockScreenRequired",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "lockScreenRequiredUnknown",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "jailBrokenDevice",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "jailBrokenDeviceUnknown",
      "value": "false"
    },
    {
      "action": "Allow",
      "name": "minWindowsVersion",
      "value": "8.1"
    },
    {
      "action": "Allow",
      "name": "minIosVersion",
      "value": "7.1"
    },
    {
      "action": "Allow",
      "name": "minAndroidVersion",
      "value": "4.1"
    },
    {
      "action": "Allow",
      "name": "minIosAppVersion",
      "value": "4.0"
    },
    {
      "action": "Allow",
      "name": "minAndroidAppVersion",
      "value": "8.0"
    },
    {
      "action": "Allow",
      "name": "minWindowsAppVersion",
      "value": "1.0"
    }
  ],
  "endpointRestrictions": {
    "maxEndpointTrustDurationInDays": 15,
    "maxEnrolledDevices": 5,
    "maxTrustedEndpoints": 5,
    "trustedEndpointsEnabled": true,
    "maxIncorrectAttempts": 10
  },
  "id": "AuthenticationFactorSettings",
  "mfaEnrollmentType": "Required",
  "pushEnabled": false,
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorSettings"
  ],
  "thirdPartyFactor": {
        "duoSecurity": true
    },
  "notificationSettings": {
        "pullEnabled": true
    },
     "urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": {
        "duoSecuritySettings": {
            "integrationKey": "XXXXXXXXXXXXXXXXXXXX",
            "secretKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "apiHostname": "api-example.duosecurity.com",
            "userMappingAttribute": "userName"
    }
    },
  "securityQuestionsEnabled": false,
  "smsEnabled": false,
  "emailEnabled": false,
  "bypassCodeEnabled": false,
  "totpEnabled": false,
  "totpSettings": {
    "hashingAlgorithm": "SHA1",
    "jwtValidityDurationInSecs": 300,
    "keyRefreshIntervalInDays": 60,
    "passcodeLength": 6,
    "smsOtpValidityDurationInMins": 10,
    "smsPasscodeLength": 6,
    "timeStepInSecs": 30,
    "timeStepTolerance": 3,
	"emailOtpValidityDurationInMins": 10,
	"emailPasscodeLength": 6
  },
  "mfaEnabledCategory": "NONE"
}

Corpo da Resposta

O exemplo a seguir mostra o conteúdo do corpo da resposta no formato JSON:

Exemplo de Corpo da Resposta
{
    "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"
}

Ativando o Duo Web SDK v4

O Duo Web SDK v2 (iFrame) é ativado em um domínio de identidades por padrão. Para usar o Duo Web SDK v4, você deve ativá-lo.

Use as instruções a seguir para ativar o Duo Web SDK v4.

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

    Exemplo de Resposta

    Você deverá ver as seguintes definições de v2 do Duo Web SDK.

    "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. Faça backup de sua instância caso seja necessário fazer rollback.
  3. Atualize o payload da etapa 1 adicionando enableWebSDKv4 e duoSecurityAuthzRedirectUrl na seção urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.

    • enableWebSDKv4: O valor padrão é false. Se enableWebSDKv4 for falso, o Duo Web SDK v2 será usado.
    • duoSecurityAuthzRedirectUrl: O valor padrão está em branco. Adicione o URL da sua organização aqui. O URL de redirecionamento é usado para iniciar a autenticação de segurança Duo, que recebe uma resposta do servidor de segurança Duo com o duoSecurityAuthzState e o duoSecurityAuthzCode. Este URL pode ser substituído usando a IU personalizada. A IU personalizada deve usar este ponto final para receber o código e o parâmetro do Servidor de Segurança Duo.

    Observe que o atributo a seguir muda de v2 para v4.

    • client_id (integrationKey em v2)
    • clientSecret (secretKey em v2)
    • apiHostName (sem alteração em v2)
    • userMappingAttribute (sem alteração em v2)

    Exemplo de Solicitação

    "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. Usando o cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings usando o payload da etapa 3.

Autenticando Nome de Usuário e Senha com Segurança Duo como Fator de Autenticação

Este caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidade para autenticar usuários e executar inscrição e autenticação multifator com o Duo Web SDK v2 ou o Duo Web SDK v4.

Nota

  • Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
  • Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Os seguintes exemplos de conjuntos são incluídos neste caso de uso:

Inscrever um Novo Usuário com Segurança Duo Usando o Web SDK v2

Este caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para inscrever um novo usuário e um dispositivo associado ao Duo Web SDK v2.

Nota

  • Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
  • Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Utilize as seguintes etapas para o caso de uso. Cada etapa contém exemplos de solicitação e resposta:

Observação

Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: nome de usuário e senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Neste exemplo de caso de uso, a inscrição é enviada na próxima etapa para iniciar a inscrição do usuário.

Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo

Esta etapa inicia a inscrição no Duo Security. O cliente deve incluir os seguintes atributos:

  • op: informa ao servidor que tipo de operação o cliente deseja
  • authFactor: define em qual fator de autenticação o usuário deseja se inscrever
  • requestState: recebido na resposta da Etapa 2

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da solicitação no formato JSON:

{
   "status": "success",
   "ecId": "4uy3^1k0000000000",
   "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
          |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjMwNTM=
          |5853cc561ded98c72426b633a1b1e719401e2345:APP
          |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjYzNTM=
          |37f594101a380ff3902e0a2cb545346ed196bbca",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
   },
   "nextOp": [
       "credSubmit",
       "createToken",
       "createSession",
       "enrollment"
   ],
   "mfaSettings": {
       "enrollmentRequired": false
   },
   "scenario": "ENROLLMENT",
   "requestState": "{{requestState}}"
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.

Etapa 4: Iniciar Autenticação de Segurança Duo

Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.

Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança 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"
    });
}

Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.

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

Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.

Etapa 5: Submeter Credenciais do Fator

Esta etapa envia as credenciais de fator no requestState que foram recebidas na resposta da Etapa 3. Observe que o payload da solicitação não contém o atributo authFactor porque o requestState o contém. O cliente deve incluir os seguintes atributos:

  • op: informa ao servidor que tipo de operação o cliente deseja
  • requestState: recebido na resposta da Etapa 3

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON para enviar as credenciais de fator:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Os valores nextOp indicam o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, createToken é enviado na próxima etapa.

Etapa 6: Criar o Token de Autenticação

Esta etapa indica que o cliente está pronto e precisa de uma sessão criada. O servidor valida que nenhuma outra avaliação de fator (dependendo do que é definido para a política) é necessária e responde com o token ou nega acesso. O cliente deve incluir os seguintes atributos:
  • op: informa ao servidor que tipo de operação o cliente deseja
  • requestState: recebido na resposta da Etapa 5

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Inscrever um Novo Usuário com Segurança Duo Usando o Web SDK v4

Este caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para inscrever um novo usuário e um dispositivo associado ao Duo Web SDK v4.

Observação

Se você precisar ativar o Duo Web SDK v4, consulte Ativando o Duo Web SDK v4.
Nota

  • Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
  • Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Utilize as seguintes etapas para o caso de uso. Cada etapa contém exemplos de solicitação e resposta:

Observação

Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Neste exemplo de caso de uso, a inscrição é enviada na próxima etapa para iniciar a inscrição do usuário.

Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da solicitação no formato JSON.

{
   "status": "success",
   "ecId": "i2tul0R0000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
   ],
   "DUO_SECURITY": {
      "credentials": [
         "duoSecurityAuthzCode",
         "duoSecurityAuthzState"
      ],
      "authnDetails": {
         "duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
      }
   },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
   ],
   "scenario": "AUTHENTICATION",
   "requestState": "requestState",
   "trustedDeviceSettings": {
      "trustDurationInDays": 15
   }
}

Etapa 4: Iniciar Autenticação de Segurança Duo

Durante a autenticação Duo Security, o navegador redireciona para o Duo Security Server, o Duo Security Server e carrega a página de autenticação secundária na qual o usuário executa a autenticação secundária. Após a autenticação bem-sucedida, o Servidor de Segurança Duo responde com os parâmetros de estado (duoSecurityAuthzState) e código (duoSecurityAuthzCode). Esses parâmetros devem ser submetidos ao domínio de identidades para concluir a autenticação.

Use as seguintes etapas para obter os parâmetros de estado e código:

  1. Obtenha o URL ao qual redirecionar do duoSecurityAuthzRequest.

    Por exemplo:
    "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>"

    O URL de redirecionamento para duoSecurityAuthzRedirectURL.

  2. Faça 303 Redirecionar para o Servidor de Segurança Duo.

  3. Conclua o processo de inscrição e autenticação do Duo Security.

    O Servidor de Segurança Duo redireciona de volta para duoSecurityAuthzRedirectURL com duoSecurityAuthzState e duoSecurityAuthzCode.

Etapa 5: Submeter Credenciais do Fator

Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta para o domínio de identidades para concluir a autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação no formato JSON:

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

Exemplo de Resposta

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

Etapa 6: Criar o Token de Autenticação

Esta etapa indica que o cliente está pronto e precisa de uma sessão criada. O servidor valida que nenhuma outra avaliação de fator (dependendo do que é definido para a política) é necessária e responde com o token ou nega acesso. O cliente deve incluir os seguintes atributos:
  • op: informa ao servidor que tipo de operação o cliente deseja
  • requestState: recebido na resposta da Etapa 5

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Autenticar uma Conta de Usuário com Segurança Duo Usando o Web SDK v2

Este caso de uso fornece um exemplo passo a passo de uso da API de Autenticação de domínios de identidade para autenticar uma conta de usuário com o Duo Web SDK v2.

Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Observação

Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.

Etapa 3: Iniciar Autenticação de Segurança Duo

Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.

Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança 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"
    });
}

Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.

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

Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.

Etapa 4: Submeter Credenciais do Fator

Esta etapa envia as credenciais de fator no requestState que foram recebidas na resposta da Etapa 2. Observe que o payload da solicitação não contém o atributo authFactor porque o requestState o contém. O cliente deve incluir os seguintes atributos:

  • op: informa ao servidor que tipo de operação o cliente deseja
  • requestState: recebido na resposta da Etapa 2

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON para enviar as credenciais de fator:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Autenticar uma Conta de Usuário com Segurança Duo Usando o Web SDK v4

Este caso de uso fornece um exemplo passo a passo de uso da API de Autenticação de domínios de identidade para autenticar uma conta de usuário com o Duo Web SDK v4.

Observação

Se você precisar ativar o Duo Web SDK v4, consulte Ativando o Duo Web SDK v4.
Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Observação

Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.

Etapa 3: Iniciar Autenticação de Segurança Duo

Durante a autenticação Duo Security, o navegador redireciona para o Duo Security Server, o Duo Security Server e carrega a página de autenticação secundária na qual o usuário executa a autenticação secundária. Após a autenticação bem-sucedida, o Servidor de Segurança Duo responde com os parâmetros de estado (duoSecurityAuthzState) e código (duoSecurityAuthzCode). Esses parâmetros devem ser submetidos ao domínio de identidades para concluir a autenticação.

Use as seguintes etapas para obter os parâmetros de estado e código:

  1. Obtenha o URL ao qual redirecionar do duoSecurityAuthzRequest.

    Por exemplo:
    "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>"

    O URL de redirecionamento para duoSecurityAuthzRedirectURL.

  2. Faça 303 Redirecionar para o Servidor de Segurança Duo.

  3. Conclua o processo de inscrição e autenticação do Duo Security.

    O Servidor de Segurança Duo redireciona de volta para duoSecurityAuthzRedirectURL com duoSecurityAuthzState e duoSecurityAuthzCode.

Etapa 4: Submeter Credenciais do Fator

Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta para o domínio de identidades para concluir a autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação no formato JSON:

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

Exemplo de Resposta

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

Autenticar um Usuário com Segurança Dupla Quando Usado como Fator de Backup

Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para autenticar uma conta de usuário com a Segurança Duo, mesmo quando ela é configurada como um fator de backup.

Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: nome de usuário e senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "4uy3^1k0000000000",
    "nextAuthFactors": [
        "TOTP",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY",
        "SMS",
        "EMAIL",
        "PUSH"
    ],
    "EnrolledAccountRecoveryFactorsDetails": {
        "EMAIL": {
            "credentials": [
                "accountRecoveryFactor"
            ],
            "enrolledDevices": [
                {
                    "displayName": "clarence.saladna@example.com"
                }
            ]
        },
        "enrolledAccRecFactorsList": [
            "EMAIL"
        ]
    },
    "TOTP": {
        "credentials": [
            "offlineTotp"
        ]
    },
    "SMS": {
        "credentials": [
            "phoneNumber",
            "countryCode"
        ]
    },
    "nextOp": [
        "createToken",
        "createSession",
        "enrollment"
    ],
    "mfaSettings": {
        "enrollmentRequired": false
    },
    "scenario": "ENROLLMENT",
    "requestState": "{{requestState}}"
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, getBackupFactors é enviado na próxima etapa.

Etapa 3: Obter a Lista de Fatores de Backup

Esta etapa permite obter a lista de fatores de backup.

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "status": "success",
    "ecId": "5MyZ41p0000000000",
    "nextAuthFactors": [
        "EMAIL",
        "BYPASSCODE",
        "SECURITY_QUESTIONS",
        "DUO_SECURITY"
    ],
    "EMAIL": {
        "credentials": [
            "preferred",
            "deviceId"
        ],
        "enrolledDevices": [
            {
                "deviceId": "790ed820aee048a78de17ebe1ebddb19",
                "displayName": "ashXXXXX@oracle.com"
            }
        ]
    },
    "BYPASSCODE": {
        "credentials": [
            "bypassCode"
        ]
    },
    "SECURITY_QUESTIONS": {
        "credentials": [
            "questionId",
            "answer"
        ],
        "questions": [
            {
                "questionId": "FirstCar",
                "text": "What's the model of your first car?"
            }
        ],
        "preferred": true
    },
    "DUO_SECURITY": {
        "enrolledDevices": [
            {
                "deviceId": "3053eed6249a4dd4835c51bf873c5f85",
                "displayName": "jarvis's Duo Security Account"
            }
        ]
    },
    "nextOp": [
        "credSubmit",
        "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
        "trustDurationInDays": 15
    }
}

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 4: Selecionar Segurança Duo na Lista de Fatores de Backup

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
	"status": "success",
	"ecId": "5MyZ41q0000000000",
	"DUO_SECURITY": {
	"credentials": [
		 "duoSecurityResponse"
	],
	"authnDetails": {
		"duoSecurityChallenge": "TX
			 |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ1NDg=
			 |230d8328f53ec537ecd033fbb175fbce65930c3e:APP
			 |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
			 |af94d927d3e027141177e8f88baa19f6427502ee",
		   "duoSecurityHost": "api-example.duosecurity.com"
		}
	},
	"nextOp": [
		"credSubmit",
	       "getBackupFactors"
	],
	"scenario": "AUTHENTICATION",
	"requestState": "{{requestState}}",
	"trustedDeviceSettings": {
		"trustDurationInDays": 15
	}
}

Definir Segurança Duo como Fator Preferencial

Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para definir a Segurança Duo como o fator preferencial para autenticação.

Você pode definir o flag preferred como true para tornar a Segurança Duo como um fator preferencial, se um usuário já tiver outro fator diferente da Segurança Duo como preferencial.

Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: nome de usuário e senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
   "status": "success",
   "ecId": "g5CAF1i1000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
    ],
    "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
            |73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
            |11f57d2ad044abee78d3290fdff69af7c3d22d71",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
    },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
      "trustDurationInDays": 15
    }
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.

Etapa 3: Iniciar Autenticação de Segurança Duo

Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.

Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança 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"
    });
}

Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.

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

Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.

Etapa 4: Ativar Segurança Duo como o Fator Preferencial

Esta etapa permite a Segurança Duo como o fator preferencial. Para esta etapa, o cliente deve incluir os seguintes atributos:
  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Suportar Dispositivo Confiável ao Usar Duo como Fator de Autenticação

Esse caso de uso fornece um exemplo passo a passo do uso da API REST de domínios de identidades para suportar dispositivos confiáveis ao usar o Duo como fator de autenticação.

Dica

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Etapa 1: Iniciar o Fluxo de Autenticação

Obtenha o requestState inicial para iniciar o fluxo de autenticação.

Exemplo de Solicitação

O exemplo a seguir mostra a solicitação no formato cURL:

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

O appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.

Etapa 2: Enviar as Credenciais do Usuário

Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:

  • credentials: usuário/senha

  • requestState: recebido na resposta da Etapa 1

  • op: informa ao servidor que tipo de operação o cliente deseja

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
   "status": "success",
   "ecId": "g5CAF1i1000000000",
   "nextAuthFactors": [
      "DUO_SECURITY"
    ],
    "DUO_SECURITY": {
      "credentials": [
         "duoSecurityResponse"
      ],
      "authnDetails": {
         "duoSecurityChallenge": "TX
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
            |73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
            |amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
            |11f57d2ad044abee78d3290fdff69af7c3d22d71",
         "duoSecurityHost": "api-example.duosecurity.com"
      }
    },
   "nextOp": [
      "credSubmit",
      "getBackupFactors"
    ],
    "scenario": "AUTHENTICATION",
    "requestState": "{{requestState}}",
    "trustedDeviceSettings": {
      "trustDurationInDays": 15
    }
}

Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.

Etapa 3: Iniciar Autenticação de Segurança Duo

Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.

Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança 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"
    });
}

Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.

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

Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.

Etapa 4: Ativar um Dispositivo Confiável

Esta etapa ativa um dispositivo como confiável. Depois que o dispositivo for confiável, a MFA não será desafiada, mesmo que a Duo Security esteja inscrita.

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

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

Inscrevendo-se no MFA com Segurança Duo Usando o Autoatendimento

Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para inscrição de autoatendimento na Autenticação Multifator (MFA) usando a Segurança Duo.

Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.

Como uma etapa de pré-requisito, você deve obter um token ME antes de seguir essas etapas. Consulte Gerando Token de Acesso Usando API de Autenticação para obter informações sobre como obter um token ME.

Observação

Essas etapas pressupõem que os fatores relevantes da MFA sejam ativados usando Configurar Definições de Autenticação Multifator.

Step1: Inscrever um Usuário com Fator Duo

Esta etapa inicia a inscrição do Duo Security em uma solicitação POST para o ponto final /admin/v1/MyAuthenticationFactorEnroller. O cliente deve incluir o seguinte atributo:
  • value: define o id do usuário. Você pode fazer uma chamada GET para {{HOST}}/admin/v1/Me para obter o valor "id".

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo do corpo da solicitação POST no formato JSON:

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

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo do corpo da resposta no formato JSON:

{
    "authnFactors": [
        "THIRDPARTY"
    ],
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "user": {
        "value": "6852e4e2bc864b3b912d7bd48f9f4879",
        "$ref": "https://<domainURL>admin/v1/Users/6852e4e2bc864b3b912d7bd48f9f4879"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorEnroller",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorEnroller"
    },
    "displayName": "test's Phone",
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b"
}

Na resposta, o deviceId e o requestId devem ser passados na próxima etapa.

Etapa 2: Iniciar Autenticação Duo para o Usuário

Esta etapa inicia a autenticação no lado de terceiros enviando uma solicitação POST ao ponto final /admin/v1/MyAuthenticationFactorInitiator. O cliente deve incluir os seguintes atributos:

  • requestId: recebido na resposta da Etapa 1
  • deviceId: recebido na resposta da Etapa 1
  • userName: nome de usuário do usuário

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo do corpo da solicitação POST no formato JSON:

{
    "requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
    "deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ]
}

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorInitiator",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorInitiator"
    },
    "additionalAttributes": [
        {
            "name": "duoHost",
            "value": "api-0095dc4a.duosecurity.com"
        },
        {
            "name": "duoChallenge",
            "value": "TX
               |Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyMDkz==
               |8a0b6f0472b1c03357e9d6b3348d0a341c96e6a0:APP
               |Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ 4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyNDIzNA==
               |5d45c215e6e5af7d866df480087d825aa1cf4279"
        }
    ]
}

Na resposta, deviceId e requestId devem ser especificados na próxima etapa.

Etapa 3: Validar Fator Duo para Cenário de Inscrição

Esta etapa chama a API de fator de terceiros com credenciais coletadas para validar a inscrição de um usuário em uma solicitação POST no ponto final /admin/v1/MyAuthenticationFactorValidator.

O cliente deve incluir os seguintes atributos:

  • requestId: recebido na resposta da Etapa 2
  • deviceId: recebido na resposta da Etapa 2

Exemplo de Solicitação

O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:

{
    "requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
    "deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "scenario": "ENROLLMENT",
    "username": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
    ],
    "additionalAttributes": [
        {
            "name": "duoResponse",
            "value": "AUTH|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMwNDc2|9439adbea1b90a90c9169f366cc028aabde8ac51:APP|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMzODYx|94bcc9a0c4ab6da617827432d021171d3b393fd3"
        }
    ]
}

Exemplo de Resposta

O exemplo a seguir mostra o conteúdo da resposta no formato JSON:

{
    "requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
    "deviceId": "ca0ba497327c45d2a4a408301c78682b",
    "authFactor": "THIRDPARTY",
    "thirdPartyFactor": {
        "thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
        "thirdPartyFactorType": "None",
        "thirdPartyVendorName": "DUO_SECURITY"
    },
    "scenario": "ENROLLMENT",
    "userName": "testuser1",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorValidator",
        "location": "https://<domainURL>admin/v1/MyAuthenticationFactorValidator"
    },
    "status": "SUCCESS",
    "displayName": "test's Phone",
    "mfaStatus": "ENROLLED",
    "mfaPreferredDevice": "0d37a1334bdf4c9ca80474dcadba8d10",
    "mfaPreferredAuthenticationFactor": "THIRDPARTY",
    "mfaPreferredThirdPartyFactorType": "None",
    "securityQuestionsPresent": false,
    "devicesCount": 1,
    "emailFactorEnrolled": false
}

Na resposta, o atributo mfaStatus:"ENROLLED" indica que o usuário se inscreveu para MFA. O atributo mfaPreferredAuthenticationFactor indica o fator definido como o método preferencial. Nesse caso, é THIRDPARTY.