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 para um tenant enviando uma solicitação PUT no recurso REST usando cURL. Para obter mais informações sobre a cURL, consulte Usar cURL.
Comando cURL
O comando neste exemplo usa a estrutura de URL
https://<domainURL>/resource-path, na qual <domainURL> representa o URL do Serviço de Identidade e o caminho do recurso representa a API do Serviço de Identidade. Consulte Enviar Solicitações para obter a estrutura de URL apropriada a ser usada. curl
-X PUT
-H "Content-Type:application/scim+json"
-H "Authorization: Bearer <Access Token Value>"
https://<domainURL>/admin/v1/AuthenticationFactorSettings/<ID>
Corpo da Solicitação
{
"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/AuthenticationFactorSettingsExemplo de Resposta
Você deverá ver as seguintes definições de v2 do Duo Web SDK.
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": { "duoSecuritySettings": { "integrationKey": "<integration-key>", "secretKey": "<secret-key>", "apiHostname": "api-example.duosecurity.com", "userMappingAttribute": "userName" } - Faça backup de sua instância caso seja necessário fazer rollback.
-
Atualize o payload da etapa 1 adicionando
enableWebSDKv4eduoSecurityAuthzRedirectUrlna seçãourn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings.enableWebSDKv4: O valor padrão éfalse. SeenableWebSDKv4for 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 oduoSecurityAuthzStatee oduoSecurityAuthzCode. Este URL pode ser substituído usando a IU personalizada. A IU personalizada deve usar este ponto final para receber o código e o parâmetro do Servidor de Segurança Duo.
Observe que o atributo a seguir muda de v2 para v4.
client_id(integrationKeyem v2)clientSecret(secretKeyem v2)apiHostName(sem alteração em v2)userMappingAttribute(sem alteração em v2)
Exemplo de Solicitação
"urn:ietf:params:scim:schemas:oracle:idcs:extension:thirdParty:AuthenticationFactorSettings": { "duoSecuritySettings": { "integrationKey": "<integration-key>", "secretKey": ""<secret-key>"", "apiHostname": "api-6ff7f509.duosecurity.com", "userMappingAttribute": "primaryEmail", "enableWebSDKv4": true, "duoSecurityAuthzRedirectUrl": "https://abc.co/a/c" } } -
Usando o cURL,
PUT /admin/v1/AuthenticationFactorSettings/AuthenticationFactorSettingsusando o payload da etapa 3.
Autenticando Nome de Usuário e Senha com Segurança Duo como Fator de Autenticação
Este caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidade para autenticar usuários e executar inscrição e autenticação multifator com o Duo Web SDK v2 ou o Duo Web SDK v4.
- Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
- Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Os seguintes exemplos de conjuntos são incluídos neste caso de uso:
-
Inscrever um Novo Usuário com Segurança Duo Usando o Web SDK v2
-
Inscrever um Novo Usuário com Segurança Duo Usando o Web SDK v4
-
Autenticar uma Conta de Usuário com Segurança Duo Usando o Web SDK v2
-
Autenticar uma Conta de Usuário com Segurança Duo Usando o Web SDK v4
-
Autenticar um Usuário com Segurança Dupla 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 de uso da API REST de domínios de identidades para inscrever um novo usuário e um dispositivo associado ao Duo Web SDK v2.
- Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
- Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Utilize as seguintes etapas para o caso de uso. Cada etapa contém exemplos de solicitação e resposta:
- Etapa 1: Iniciar o Fluxo de Autenticação
- Etapa 2: Enviar 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: Submeter Credenciais do Fator
- Etapa 6: Criar o Token de Autenticação
Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:nome de usuário e senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Neste exemplo de caso de uso, a inscrição é enviada na próxima etapa para iniciar a inscrição do usuário.
Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo
Esta etapa inicia a inscrição no Duo Security. O cliente deve incluir os seguintes atributos:
op: informa ao servidor que tipo de operação o cliente 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 de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.
Etapa 4: Iniciar Autenticação de Segurança Duo
Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.
Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança Duo.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.
Etapa 5: Submeter Credenciais do Fator
Esta etapa envia as credenciais de fator no requestState que foram recebidas na resposta da Etapa 3. Observe que o payload da solicitação não contém o atributo authFactor porque o requestState o contém. O cliente deve incluir os seguintes atributos:
op: informa ao servidor que tipo de operação o cliente 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 enviar as credenciais de fator:
{
"op":"credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
|f2d0df2a189219a8e85db190ac66fab33be996c3:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
|a3b7c901e845ebd80451ab670473e983707a8459"
},
"requestState":"{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Os valores nextOp indicam o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, createToken é enviado na próxima etapa.
Etapa 6: Criar o Token de Autenticação
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 de uso da API REST de domínios de identidades para inscrever um novo usuário e um dispositivo associado ao Duo Web SDK v4.
- Use essa API de Autenticação somente se estiver criando sua própria experiência de log-in de ponta a ponta desenvolvendo um aplicativo de acesso personalizado para ser usado por domínios de identidades.
- Essa API de Autenticação não pode ser usada para integrar seus aplicativos a domínios de identidade para fins de sign-on único.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Utilize as seguintes etapas para o caso de uso. Cada etapa contém exemplos de solicitação e resposta:
- Etapa 1: Iniciar o Fluxo de Autenticação
- Etapa 2: Enviar 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: Submeter Credenciais do Fator
- Etapa 6: Criar o Token de Autenticação
Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Neste exemplo de caso de uso, a inscrição é enviada na próxima etapa para iniciar a inscrição do usuário.
Etapa 3: Iniciar Solicitação de Inscrição de Segurança Duo
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "enrollment",
"authFactor": "DUO_SECURITY",
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da solicitação no formato JSON.
{
"status": "success",
"ecId": "i2tul0R0000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityAuthzCode",
"duoSecurityAuthzState"
],
"authnDetails": {
"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "requestState",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Etapa 4: Iniciar Autenticação de Segurança Duo
Durante a autenticação Duo Security, o navegador redireciona para o Duo Security Server, o Duo Security Server e carrega a página de autenticação secundária na qual o usuário executa a autenticação secundária. Após a autenticação bem-sucedida, o Servidor de Segurança Duo responde com os parâmetros de estado (duoSecurityAuthzState) e código (duoSecurityAuthzCode). Esses parâmetros devem ser submetidos ao domínio de identidades para concluir a autenticação.
Use as seguintes etapas para obter os parâmetros de estado e código:
-
Obtenha o URL ao qual redirecionar do
duoSecurityAuthzRequest.Por exemplo:"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"O URL de redirecionamento para
duoSecurityAuthzRedirectURL. -
Faça 303 Redirecionar para o Servidor de Segurança Duo.
-
Conclua o processo de inscrição e autenticação do Duo Security.
O Servidor de Segurança Duo redireciona de volta para
duoSecurityAuthzRedirectURLcomduoSecurityAuthzStateeduoSecurityAuthzCode.
Etapa 5: Submeter Credenciais do Fator
Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta para o domínio de identidades para concluir a autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação no formato JSON:
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Exemplo de Resposta
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"displayName": "{{username}}'s Duo Security Account",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Etapa 6: Criar o Token de Autenticação
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 Segurança Duo Usando o Web SDK v2
Este caso de uso fornece um exemplo passo a passo de uso da API de Autenticação de domínios de identidade para autenticar uma conta de usuário com o Duo Web SDK v2.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.
Etapa 3: Iniciar Autenticação de Segurança Duo
Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.
Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança Duo.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.
Etapa 4: Submeter Credenciais do Fator
Esta etapa envia as credenciais de fator no requestState que foram recebidas na resposta da Etapa 2. Observe que o payload da solicitação não contém o atributo authFactor porque o requestState o contém. O cliente deve incluir os seguintes atributos:
op: informa ao servidor que tipo de operação o cliente 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 enviar as credenciais de fator:
{
"op":"credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM5NjA=
|f2d0df2a189219a8e85db190ac66fab33be996c3:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc0NTU=
|a3b7c901e845ebd80451ab670473e983707a8459"
},
"requestState":"{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Autenticar uma Conta de Usuário com Segurança Duo Usando o Web SDK v4
Este caso de uso fornece um exemplo passo a passo de uso da API de Autenticação de domínios de identidade para autenticar uma conta de usuário com o Duo Web SDK v4.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Essas etapas pressupõem que a MFA esteja ativada e uma política de sign-on seja criada para a MFA. Consulte Configurar Definições de Autenticação Multifator.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.
Etapa 3: Iniciar Autenticação de Segurança Duo
Durante a autenticação Duo Security, o navegador redireciona para o Duo Security Server, o Duo Security Server e carrega a página de autenticação secundária na qual o usuário executa a autenticação secundária. Após a autenticação bem-sucedida, o Servidor de Segurança Duo responde com os parâmetros de estado (duoSecurityAuthzState) e código (duoSecurityAuthzCode). Esses parâmetros devem ser submetidos ao domínio de identidades para concluir a autenticação.
Use as seguintes etapas para obter os parâmetros de estado e código:
-
Obtenha o URL ao qual redirecionar do
duoSecurityAuthzRequest.Por exemplo:"duoSecurityAuthzRequest": "https://api-xxxxxxxx.duosecurity.com/oauth/v1/authorize?response_type=code&client_id=<client_id>&redirect_uri=duoSecurityAuthzRedirectURL&state=3047103d-d707-4b94-a960-203430071154&request=<request>"O URL de redirecionamento para
duoSecurityAuthzRedirectURL. -
Faça 303 Redirecionar para o Servidor de Segurança Duo.
-
Conclua o processo de inscrição e autenticação do Duo Security.
O Servidor de Segurança Duo redireciona de volta para
duoSecurityAuthzRedirectURLcomduoSecurityAuthzStateeduoSecurityAuthzCode.
Etapa 4: Submeter Credenciais do Fator
Informe duoSecurityAuthzState e duoSecurityAuthzCode da resposta para o domínio de identidades para concluir a autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação no formato JSON:
{
"op": "credSubmit",
"credentials":
{
"duoSecurityAuthzCode": "<duo-security-authz-code>",
"duoSecurityAuthzState": "<duo-security-authz-state>"
}
,
"requestState": "requestState"}'
Exemplo de Resposta
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41m0000000000"
}
Autenticar um Usuário com Segurança Dupla Quando Usado como Fator de Backup
Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para autenticar uma conta de usuário com a Segurança Duo, mesmo quando ela é configurada como um fator de backup.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:nome de usuário e senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "4uy3^1k0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"DUO_SECURITY",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"EMAIL"
]
},
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"scenario": "ENROLLMENT",
"requestState": "{{requestState}}"
}
Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, getBackupFactors é enviado na próxima etapa.
Etapa 3: Obter a Lista de Fatores de Backup
Esta etapa permite obter a lista de fatores de backup.
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "getBackupFactors",
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "5MyZ41p0000000000",
"nextAuthFactors": [
"EMAIL",
"BYPASSCODE",
"SECURITY_QUESTIONS",
"DUO_SECURITY"
],
"EMAIL": {
"credentials": [
"preferred",
"deviceId"
],
"enrolledDevices": [
{
"deviceId": "790ed820aee048a78de17ebe1ebddb19",
"displayName": "ashXXXXX@oracle.com"
}
]
},
"BYPASSCODE": {
"credentials": [
"bypassCode"
]
},
"SECURITY_QUESTIONS": {
"credentials": [
"questionId",
"answer"
],
"questions": [
{
"questionId": "FirstCar",
"text": "What's the model of your first car?"
}
],
"preferred": true
},
"DUO_SECURITY": {
"enrolledDevices": [
{
"deviceId": "3053eed6249a4dd4835c51bf873c5f85",
"displayName": "jarvis's Duo Security Account"
}
]
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 4: Selecionar Segurança Duo na Lista de Fatores de Backup
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"authFactor": "DUO_SECURITY",
"credentials": {
"deviceId": "3053eed6249a4dd4835c51bf873c5f85"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "5MyZ41q0000000000",
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ1NDg=
|230d8328f53ec537ecd033fbb175fbce65930c3e:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
|af94d927d3e027141177e8f88baa19f6427502ee",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Definir Segurança Duo como Fator Preferencial
Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para definir a Segurança Duo como o fator preferencial para autenticação.
Você pode definir o flag preferred como true para tornar a Segurança Duo como um fator preferencial, se um usuário já tiver outro fator diferente da Segurança Duo como preferencial.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:nome de usuário e senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "g5CAF1i1000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
|73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
|11f57d2ad044abee78d3290fdff69af7c3d22d71",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.
Etapa 3: Iniciar Autenticação de Segurança Duo
Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.
Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança Duo.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.
Etapa 4: Ativar Segurança Duo como o Fator Preferencial
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQzMzg=
|4a40cc9c79d4a65b48d0f9b871d7a4e83481b3ca:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1Njc4NDg=
|af94d927d3e027141177e8f88baa19f6427502ee",
"preferred": true
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "5MyZ41r0000000000"
}
Suportar Dispositivo Confiável ao Usar Duo como Fator de Autenticação
Esse caso de uso fornece um exemplo passo a passo do uso da API REST de domínios de identidades para suportar dispositivos confiáveis ao usar o Duo como fator de autenticação.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-authn-api-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Etapa 1: Iniciar o Fluxo de Autenticação
Obtenha o requestState inicial para iniciar o fluxo de autenticação.
Exemplo de Solicitação
O exemplo a seguir mostra a solicitação no formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
O
appName é opcional. O appName é o nome do Aplicativo que o cliente deseja acessar. Se um appName for fornecido, as políticas de sign-on específicas do Aplicativo serão processadas e o cliente será desafiado pelos fatores necessários com base nessa política.Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Na resposta, o valor nextOp indica o que pode ser enviado como o valor op na próxima solicitação. Neste exemplo de caso de uso, credSubmit deve ser enviado na próxima etapa. O requestState contém dados contextuais necessários para processar a solicitação.
Etapa 2: Enviar as Credenciais do Usuário
Submeta as credenciais do usuário como o primeiro fator, que são o nome de usuário e a senha. Para esta etapa, o cliente deve incluir os seguintes atributos:
-
credentials:usuário/senha -
requestState:recebido na resposta da Etapa 1 -
op:informa ao servidor que tipo de operação o cliente deseja
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"status": "success",
"ecId": "g5CAF1i1000000000",
"nextAuthFactors": [
"DUO_SECURITY"
],
"DUO_SECURITY": {
"credentials": [
"duoSecurityResponse"
],
"authnDetails": {
"duoSecurityChallenge": "TX
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjM2Njc=
|73894f83e7ee87c81388f84b4c0015cb86c6fd0b:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjY5Njc=
|11f57d2ad044abee78d3290fdff69af7c3d22d71",
"duoSecurityHost": "api-example.duosecurity.com"
}
},
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"scenario": "AUTHENTICATION",
"requestState": "{{requestState}}",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Na resposta, os valores nextOp indicam o que pode ser enviado como o valor de op na próxima solicitação. Neste exemplo de caso de uso, credSubmit é enviado na próxima etapa.
Etapa 3: Iniciar Autenticação de Segurança Duo
Use o Web SDK v2 da Duo para integrar domínios de identidade com a Segurança Duo. O Duo oferece uma biblioteca JavaScript que interage com a iFrame usada para autenticação secundária.
Após a autenticação principal, você deverá informar os detalhes da autenticação, como duoSecurityHost e duoSecurityChallenge, que recebeu dos domínios de identidades para iFrame. Você pode usar o exemplo a seguir para iniciar a autenticação de segurança Duo e carregar o iFrame para estabelecer uma conexão com o Servidor de Segurança Duo.
function duo(msg, duoSecurityCallback) {
Duo.init({iframe: "duo_iframe",
host: msg.DUO_SECURITY.authnDetails.duoSecurityHost,
sig_request: msg.DUO_SECURITY.authnDetails.duoSecurityChallenge,
submit_callback: duoSecurityCallback,
post_argument: "resp"
});
}
Após concluir o processo de autenticação Duo, o Duo chama o método duoSecurityCallback para obter uma resposta Duo.
var duoSecurityCallback = function(details, credentials) {
var credentials = {};
credentials.duoSecurityResponse = details.firstElementChild.value;
operation = "credSubmit";
initiateAuth(credentials);
}
Em seguida, ao receber a resposta do Duo Security, você deverá informar a resposta aos domínios de identidade para concluir a autenticação.
Etapa 4: Ativar um Dispositivo Confiável
Esta etapa ativa um dispositivo como confiável. Depois que o dispositivo for confiável, a MFA não será desafiada, mesmo que a Duo Security esteja inscrita.
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"op": "credSubmit",
"credentials": {
"duoSecurityResponse": "AUTH
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjQ2MDY=
|ba16e2eb734e00d9ebe6f8129ce32669437052e9:APP
|amFydmlzfERJNThZNFhVMlFXWEVSUDQzVTRKfDE1NjE1NjgwNjc=
|ba4f415559ff2c30b23a912a18ee5f717a398563"
},
"trustedDevice": true,
"trustedDeviceDisplayName": "Postman on Windows",
"requestState": "{{requestState}}"
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"authnToken": "{{authnToken}}",
"trustToken": "{{trustToken}}",
"status": "success",
"ecId": "5MyZ41u0000000000"
}
Inscrevendo-se no MFA com Segurança Duo Usando o Autoatendimento
Esse caso de uso fornece um exemplo passo a passo de uso da API REST de domínios de identidades para inscrição de autoatendimento na Autenticação Multifator (MFA) usando a Segurança Duo.
Faça download da coleção de exemplos de casos de uso de autenticação de domínios de identidades e do arquivo de variáveis globais da pasta idcs-rest-clients no repositório GitHub de idm-samples e importe-os para o Postman.
Como uma etapa de pré-requisito, você deve obter um token ME antes de seguir essas etapas. Consulte Gerando Token de Acesso Usando API de Autenticação para obter informações sobre como obter um token ME.
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/Mepara obter o valor "id".
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo do corpo da solicitação POST no formato JSON:
{
"authnFactors":["THIRDPARTY"],
"thirdPartyFactor": {
"thirdPartyVendorName" : "DUO_SECURITY",
"thirdPartyFactorType" : "None"
},
"user": {
"value" : "012832e2e63d4bfda5bc512f2b52ccbe"
},
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
]
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo do corpo da resposta no formato JSON:
{
"authnFactors": [
"THIRDPARTY"
],
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"user": {
"value": "6852e4e2bc864b3b912d7bd48f9f4879",
"$ref": "https://<domainURL>admin/v1/Users/6852e4e2bc864b3b912d7bd48f9f4879"
},
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
],
"meta": {
"resourceType": "MyAuthenticationFactorEnroller",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorEnroller"
},
"displayName": "test's Phone",
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b"
}
Na resposta, o deviceId e o requestId devem ser passados na próxima etapa.
Etapa 2: Iniciar Autenticação Duo para o Usuário
Esta etapa inicia a autenticação no lado de terceiros enviando uma solicitação POST ao ponto final /admin/v1/MyAuthenticationFactorInitiator. O cliente deve incluir os seguintes atributos:
requestId:recebido na resposta da Etapa 1deviceId:recebido na resposta da Etapa 1userName:nome de usuário do usuário
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo do corpo da solicitação POST no formato JSON:
{
"requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
"deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
]
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
],
"meta": {
"resourceType": "MyAuthenticationFactorInitiator",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorInitiator"
},
"additionalAttributes": [
{
"name": "duoHost",
"value": "api-0095dc4a.duosecurity.com"
},
{
"name": "duoChallenge",
"value": "TX
|Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyMDkz==
|8a0b6f0472b1c03357e9d6b3348d0a341c96e6a0:APP
|Njg1MmU0ZTJiYzg2NGIzYjkxMmQ3YmQ0OGY5ZjQ 4Nzl8RElFWldUV0VMVUJYSEQ2RExKM1V8MTU0MDMyNDIzNA==
|5d45c215e6e5af7d866df480087d825aa1cf4279"
}
]
}
Na resposta, deviceId e requestId devem ser especificados na próxima etapa.
Etapa 3: Validar Fator Duo para Cenário de Inscrição
Esta etapa chama a API de fator de terceiros com credenciais coletadas para validar a inscrição de um usuário em uma solicitação POST no ponto final /admin/v1/MyAuthenticationFactorValidator.
O cliente deve incluir os seguintes atributos:
-
requestId:recebido na resposta da Etapa 2 deviceId:recebido na resposta da Etapa 2
Exemplo de Solicitação
O exemplo a seguir mostra o conteúdo da solicitação POST no formato JSON:
{
"requestId": "1e513691-9a41-4418-a0f0-f96e6f4c5735",
"deviceId": "14a2a6f2f41b4c10acc9a6d4b54ffe4a",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "7ed55e203ac7435eb6b4847dcfca28e0",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"scenario": "ENROLLMENT",
"username": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
],
"additionalAttributes": [
{
"name": "duoResponse",
"value": "AUTH|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMwNDc2|9439adbea1b90a90c9169f366cc028aabde8ac51:APP|YWJoaXNoZWsuanVsa2FAb3JhY2xlLmNvbXxESUVaV1RXRUxVQlhIRDZETEozVXwxNTM5ODMzODYx|94bcc9a0c4ab6da617827432d021171d3b393fd3"
}
]
}
Exemplo de Resposta
O exemplo a seguir mostra o conteúdo da resposta no formato JSON:
{
"requestId": "fe520538-0da6-45a3-b23f-1256091e3f0c",
"deviceId": "ca0ba497327c45d2a4a408301c78682b",
"authFactor": "THIRDPARTY",
"thirdPartyFactor": {
"thirdPartyFactorId": "1c3a069c240b4a9d9e6e90b9a2be8bed",
"thirdPartyFactorType": "None",
"thirdPartyVendorName": "DUO_SECURITY"
},
"scenario": "ENROLLMENT",
"userName": "testuser1",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
],
"meta": {
"resourceType": "MyAuthenticationFactorValidator",
"location": "https://<domainURL>admin/v1/MyAuthenticationFactorValidator"
},
"status": "SUCCESS",
"displayName": "test's Phone",
"mfaStatus": "ENROLLED",
"mfaPreferredDevice": "0d37a1334bdf4c9ca80474dcadba8d10",
"mfaPreferredAuthenticationFactor": "THIRDPARTY",
"mfaPreferredThirdPartyFactorType": "None",
"securityQuestionsPresent": false,
"devicesCount": 1,
"emailFactorEnrolled": false
}
Na resposta, o atributo mfaStatus:"ENROLLED" indica que o usuário se inscreveu para MFA. O atributo mfaPreferredAuthenticationFactor indica o fator definido como o método preferencial. Nesse caso, é THIRDPARTY.