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 de um tenant enviando uma solicitação PUT no recurso REST usando cURL. Para obter mais informações sobre o cURL, consulte Usar cURL.

comando cURL

Observação

O comando neste exemplo usa a estrutura de URL https://<domainURL>/resource-path, em que <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 de Solicitação

Veja a seguir um exemplo do corpo da solicitação no formato JSON:
Exemplo de Corpo de 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 do Corpo de 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 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 da 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 duoSecurityAuthzState e duoSecurityAuthzCode. Esse URL pode ser substituído usando a IU personalizada. A interface de usuário personalizada deve usar esse ponto final para receber o código e o parâmetro do Duo Security Server.

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

    • client_id (integrationKey em v2)
    • clientSecret (secretKey em v2)
    • apiHostName (sem alteração de v2)
    • userMappingAttribute (sem alteração de 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 cURL, PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettings usando o payload da etapa 3.

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

Este caso de uso fornece um exemplo passo a passo do uso da API REST dos domínios de identidade para autenticar usuários e executar inscrição e autenticação multifator com Duo Web SDK v2 ou 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 a ser usado pelos domínios de identidades.
  • Essa API Autenticar não pode ser usada para integrar seus aplicativos a domínios de identidades 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub e importe-os para o Postman.

Os seguintes conjuntos de exemplo estã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 do uso da API REST dos domínios de identidade 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 a ser usado pelos domínios de identidades.
  • Essa API Autenticar não pode ser usada para integrar seus aplicativos a domínios de identidades 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub e importe-os para o Postman.

Use 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 que 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 em Segurança Duo. 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 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 do Duo para integrar domínios de identidade com o Duo Security. O Duo oferece uma biblioteca JavaScript que interage com iFrame usada para autenticação secundária.

Após a autenticação principal, informe os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que você 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 iFrame para fazer 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 para Duo Security, você deve transmitir a resposta aos domínios de identidades para concluir a autenticação.

Etapa 5: Enviar Credenciais do Fator

Esta etapa envia as credenciais do fator no requestState que foram recebidas na resposta da Etapa 3. Observe que o payload de 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 submeter as credenciais do 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á concluído e precisa de uma sessão criada. O servidor valida que nenhuma outra avaliação de fator (dependendo do que está 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 do uso da API REST dos domínios de identidade 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 a ser usado pelos domínios de identidades.
  • Essa API Autenticar não pode ser usada para integrar seus aplicativos a domínios de identidades 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub e importe-os para o Postman.

Use 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 que 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 para os 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: Submeter as Credenciais do Usuário

Envie 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

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 de Segurança Duo, o navegador redireciona para o Servidor de Segurança Duo, o Servidor de Segurança Duo 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 Duo Security Server responde com os parâmetros de estado (duoSecurityAuthzState) e de 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 para o qual redirecionar de 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 o redirecionamento 303 para o servidor de segurança Duo.

  3. Conclua o processo de inscrição e autenticação de Segurança Duo.

    O Duo Security Server redireciona de volta para duoSecurityAuthzRedirectURL com duoSecurityAuthzState e duoSecurityAuthzCode.

Etapa 5: Enviar Credenciais do Fator

Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta ao 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á concluído e precisa de uma sessão criada. O servidor valida que nenhuma outra avaliação de fator (dependendo do que está 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 a Segurança Duo Usando o Web SDK v2

Este caso de uso fornece um exemplo passo a passo do 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub e importe-os para o Postman.
Observação

Essas etapas pressupõem que a MFA esteja ativada e que 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 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 do Duo para integrar domínios de identidade com o Duo Security. O Duo oferece uma biblioteca JavaScript que interage com iFrame usada para autenticação secundária.

Após a autenticação principal, informe os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que você 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 iFrame para fazer 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 para Duo Security, você deve transmitir a resposta aos domínios de identidades para concluir a autenticação.

Etapa 4: Enviar Credenciais do Fator

Esta etapa envia as credenciais do fator no requestState que foram recebidas na resposta da Etapa 2. Observe que o payload de 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 submeter as credenciais do 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 a Segurança Duo Usando o Web SDK v4

Este caso de uso fornece um exemplo passo a passo do 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub e importe-os para o Postman.
Observação

Essas etapas pressupõem que a MFA esteja ativada e que 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 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 de Segurança Duo, o navegador redireciona para o Servidor de Segurança Duo, o Servidor de Segurança Duo 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 Duo Security Server responde com os parâmetros de estado (duoSecurityAuthzState) e de 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 para o qual redirecionar de 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 o redirecionamento 303 para o servidor de segurança Duo.

  3. Conclua o processo de inscrição e autenticação de Segurança Duo.

    O Duo Security Server redireciona de volta para duoSecurityAuthzRedirectURL com duoSecurityAuthzState e duoSecurityAuthzCode.

Etapa 4: Enviar Credenciais do Fator

Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta ao 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 Duo Quando Usado como Fator de Backup

Esse caso de uso fornece um exemplo passo a passo do uso da API REST de domínios de identidade para autenticar uma conta de usuário com a Segurança Duo, mesmo quando ela está 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 op na próxima solicitação. Neste exemplo de caso de uso, getBackupFactors é enviado na próxima etapa.

Etapa 3: Obtenha a Lista de Fatores de Backup

Esta etapa permite que você obtenha 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

Envie 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",
    "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 o Fator Preferencial

Esse caso de uso fornece um exemplo passo a passo do uso da API REST dos domínios de identidade 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 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 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 do Duo para integrar domínios de identidade com o Duo Security. O Duo oferece uma biblioteca JavaScript que interage com iFrame usada para autenticação secundária.

Após a autenticação principal, informe os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que você 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 iFrame para fazer 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 para Duo Security, você deve transmitir a resposta aos domínios de identidades para concluir a autenticação.

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

Esta etapa permite que a Segurança Duo seja o fator preferencial. 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": {
    "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 identidade para suportar dispositivo confiável 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 na pasta idcs-authn-api-rest-clients dentro do repositório idm-samples GitHub 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 para os 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: Submeter as Credenciais do Usuário

Envie 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 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 do Duo para integrar domínios de identidade com o Duo Security. O Duo oferece uma biblioteca JavaScript que interage com iFrame usada para autenticação secundária.

Após a autenticação principal, informe os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que você 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 iFrame para fazer 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 para Duo Security, você deve transmitir a resposta aos domínios de identidades para concluir a autenticação.

Etapa 4: Ativar um Dispositivo como Confiável

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

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 Self Service

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

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

Como etapa de pré-requisito, você deve obter um token ME antes de seguir essas etapas. Consulte Gerando Token de Acesso Usando a 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 de Segurança Duo 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

Este exemplo 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, deviceId e requestId devem ser informados na próxima etapa.

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

Essa etapa inicia a autenticação no lado de terceiros enviando uma solicitação POST para o 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

Este exemplo 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 informados 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 a MFA. O atributo mfaPreferredAuthenticationFactor indica o conjunto de fatores como o método preferencial. Nesse caso, é THIRDPARTY.