Usando a Segurança Duo com Domínios de Identidades
Esses casos de uso fornecem um exemplo passo a passo do uso do Duo Web SDK v2 ou do Duo Web SDK v4 com um domínio 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
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
{
"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:
{
"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.
-
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" }
- Faça backup da sua instância caso seja necessário fazer rollback.
-
Atualize o payload da etapa 1 adicionando
enableWebSDKv4
eduoSecurityAuthzRedirectUrl
na seçãourn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings
.enableWebSDKv4
: O valor padrão éfalse
. SeenableWebSDKv4
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 comduoSecurityAuthzState
eduoSecurityAuthzCode
. 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" } }
-
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.
- 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.
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
-
Inscrever um Novo Usuário com Segurança Duo Usando o Web SDK v4
-
Autenticar uma Conta de Usuário com a Segurança Duo Usando o Web SDK v2
-
Autenticar uma Conta de Usuário com a Segurança Duo Usando o Web SDK v4
-
Autenticar um Usuário com Segurança Duo Quando Usado como Fator de Backup
-
Suportar Dispositivo Confiável ao Usar Duo como Fator de Autenticação
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.
- 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.
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:
- Etapa 1: Iniciar o Fluxo de Autenticação
- Etapa 2: Submeter as Credenciais do Usuário
- Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo
- Etapa 4: Iniciar Autenticação de Segurança Duo
- Etapa 5: Enviar Credenciais do Fator
- Etapa 6: Criar o Token de Autenticaçã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}}
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 desejaauthFactor
: define em qual fator de autenticação o usuário deseja se inscreverrequestState
: 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 desejarequestState
: 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
op
: informa ao servidor que tipo de operação o cliente desejarequestState
: 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.
- 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.
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:
- Etapa 1: Iniciar o Fluxo de Autenticação
- Etapa 2: Submeter as Credenciais do Usuário
- Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo
- Etapa 4: Iniciar Autenticação de Segurança Duo
- Etapa 5: Enviar Credenciais do Fator
- Etapa 6: Criar o Token de Autenticaçã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}}
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:
-
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
. -
Faça o redirecionamento 303 para o servidor de segurança Duo.
-
Conclua o processo de inscrição e autenticação de Segurança Duo.
O Duo Security Server redireciona de volta para
duoSecurityAuthzRedirectURL
comduoSecurityAuthzState
eduoSecurityAuthzCode
.
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
op
: informa ao servidor que tipo de operação o cliente desejarequestState
: 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.
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.
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}}
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 desejarequestState
: 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.
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.
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}}
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:
-
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
. -
Faça o redirecionamento 303 para o servidor de segurança Duo.
-
Conclua o processo de inscrição e autenticação de Segurança Duo.
O Duo Security Server redireciona de volta para
duoSecurityAuthzRedirectURL
comduoSecurityAuthzState
eduoSecurityAuthzCode
.
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.
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}}
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
-
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.
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}}
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
-
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.
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}}
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.
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
/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 1deviceId:
recebido na resposta da Etapa 1userName:
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
.