Autenticação de diversos fatores (MFA)
Com o Cloud Directory para o IBM Cloud® App ID, é possível requerer múltiplos fatores de autenticação durante o seu fluxo de conexão do aplicativo. Um segundo fator de autenticação aumenta a segurança de seu aplicativo, não somente confirmando que um usuário possui o conhecimento de suas credenciais, mas também tem acesso ao seu e-mail registrado, número de telefone ou aplicativo autenticador. Estendendo o fluxo de MFA, é possível configurar extensões pré-MFA e pós-MFA para tomar decisões customizadas no tempo de execução sobre o qual os usuários devem concluir o segundo fator ou fornecer a você informações analíticas sobre o seu fluxo de conexão.
OApp IDMFA é suportado como parte do fluxo de código de autorização OAuth 2.0 para usuários do Cloud Directory por meio do Widget de Login. Se você estiver usando a conexão corporativa com o SAML 2.0 ou o login social, será possível ativar a MFA por meio desse provedor de identidade.
Confira o diagrama a seguir para ver como o fluxo de MFA funciona para e-mail ou SMS.
-
Quando um usuário se conecta com sucesso ao seu aplicativo, ele conclui o primeiro fator de autenticação. Em seguida, com base em sua configuração de MFA, o usuário recebe um e-mail ou SMS que contém um código de 6 dígitos.
Quando a MFA é ativada, o Widget de login do App ID requer uma segunda forma de verificação toda vez que um usuário tenta se conectar, a menos que uma extensão esteja configurada.
-
Espera-se que um usuário olhe em seu telefone ou e-mail para obter o código e, em seguida, insira-o na tela fornecida.
-
Se o código que ele inserir corresponder ao código que ele recebeu, o usuário será redirecionado de volta para o seu aplicativo e será conectado. Se ele inserir o código incorretamente, o segundo fator de autenticação falhará e o usuário não poderá acessar os seus recursos.
Se a verificação por e-mail não for configurada, o App ID validará o canal MFA em segundo plano. Por exemplo, se você configurar o canal de e-mail para MFA e não configurar a verificação de e-mail, o App ID validará o e-mail no primeiro login bem-sucedido da MFA. Mas, se você configurar o canal de SMS, o App ID validará o número do telefone do usuário no primeiro login bem-sucedido. Se você estiver usando o canal SMS e quiser que o e-mail seja validado, certifique-se de ativar a verificação por e-mail.
Configurando um canal de e-mail
É possível configurar o App ID para enviar o código MFA para seus usuários por meio de e-mail.
Quando você ativa o MFA pela primeira vez, as duas coisas a seguir acontecem:
- Por padrão, o canal de e-mail é selecionado. É possível alternar para o canal SMS.
- O App ID registra automaticamente o e-mail primário que é anexado ao perfil do usuário do Cloud Directory.
Se o e-mail de um usuário ainda não tiver sido confirmado por meio das APIs de gerenciamento ou da verificação de e-mail ao se conectar, ele será confirmado quando um código MFA for verificado com êxito.
Ao ser ativado pela primeira vez, o MFA é configurado para usar o e-mail por padrão. É possível mudar a configuração para usar o SMS, mas não é possível configurar ambos ao mesmo tempo.
Com a GUI
É possível configurar o canal de e-mail do MFA por meio da GUI.
-
Navegue para a guia Cloud Directory > Autenticação de diversos fatores do painel do App ID.
-
Na caixa Ativar autenticação de diversos fatores, na guia Configurações, alterne a MFA para Ativada. Esteja ciente de que o MFA é cobrado como um evento de segurança avançado. Por padrão, E-mail é selecionado como o Método de autenticação.
-
Na guia Canal de email, revise o Modelo de email. É possível optar por enviar o modelo com o texto fornecido ou gravar sua própria mensagem. Certifique-se de usar a identificação HTML correta. No console, você pode adicionar parâmetros e inserir imagens. Para alterar o idioma da mensagem, você pode usar as APIs para definir o idioma. No entanto, você é responsável pelo conteúdo e pela conversão da mensagem. Consulte a tabela a seguir para ver a lista de tabelas que podem ser usadas nessa mensagem e em todas as outras mensagens que pode enviar. Se um usuário não fornecer as informações extraídas pelo parâmetro, elas aparecerão em branco.
Parâmetros da mensagem MFA Parâmetro Descrição %{display.logo}Exibe a imagem que você configurou para o widget de login. %{user.displayName}Exibe o nome da tela que um usuário escolheu usar ao interagir com o app. %{user.email}Exibe o endereço de e-mail do usuário registrado. %{user.username}Exibe o nome do usuário especificado quando o método de autenticação é configurado para o nome do usuário e a senha. %{user.firstName}Exibe o nome especificado do usuário. %{user.formattedName}Exibe o nome completo do usuário. %{user.lastName}Exibe o sobrenome especificado do usuário. %{mfa.code}Exibe um código de verificação de MFA único. Se um usuário não fornecer as informações extraídas pelo parâmetro, elas aparecerão em branco.
Com as APIs
Certifique-se de que você tenha os pré-requisitos a seguir:
- O seu ID do locatário da instância do App ID. Esse ID pode ser localizado na seção Credenciais de serviço do painel.
- O seu token de Gerenciamento de identidade e acesso (IAM). Para obter ajuda com a obtenção de um token do IAM, consulte os docs do IAM.
Para ativar a MFA:
-
Ative o MFA fazendo uma solicitação PUT para o terminal
/config/cloud_directory/mfacom a sua configuração do MFA para definirisActivecomotrue.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '"isActive": true' -
Habilite seu canal MFA fazendo uma solicitação PUT para o ponto de extremidade
/mfa/channels/<channel>com sua configuração MFA. QuandoisActiveé configurado comotrue, seu canal da MFA está ativado.$ curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/email \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '"isActive": true'
Se sua instância do App ID Cloud Directory estiver configurada para trabalhar com um remetente de e-mail customizado, a MFA usará o mesmo remetente para entregar o código descartável. Para obter mais informações, consulte os Docs do Cloud Directory.
Configurando um canal de SMS
É possível enviar uma mensagem SMS para seus usuários como uma segunda forma de verificação. Quando você ativa o SMS, o App ID tenta registrar automaticamente o primeiro número de telefone principal válido encontrado no perfil de um usuário do Cloud Directory. Se o número for inválido ou nenhum número de telefone for localizado no perfil do usuário, então um widget de registro será exibido para o usuário incluir um número. Então, o número é parte do perfil do usuário e, após a validação, se torna o número padrão usado para o MFA.
Quando a MFA é ativada inicialmente, ela é configurada para usar o e-mail por padrão. É possível mudar a configuração para usar o SMS, mas não é possível configurar ambos ao mesmo tempo.
Antes de Iniciar
App ID usa a Vonage (formalmente Nexmo) para enviar códigos únicos MFA SMS.
-
Obtenha sua chave de API e o segredo do Vonage. É possível localizar a chave de API e o segredo do Vonage na página de configurações de sua conta no painel do Vonage. Consulte a documentação da Vonage para obter mais informações sobre como obter suas credenciais.
-
Registre seu ID do remetente ou o número
fromcom o Vonage. Esse númerofromé o que aparece no telefone do seu usuário para mostrar de quem é o SMS. Em alguns países, o Vonage suporta IDs de remetente alfanuméricos. O App ID usa o valor que você insere como ID de remetente do Vonage. Portanto, se eles forem suportados pelo Vonage, será possível usar os IDs com o App ID.
Com a GUI
Para configurar o MFA com a GUI, consulte o Cloud Directory.
-
Navegue para a guia Cloud Directory > Autenticação de diversos fatores do painel do App ID.
-
Na caixa Ativar autenticação de diversos fatores, na guia Configurações, alterne a MFA para Ativada. Esteja ciente de que o MFA é cobrado como um evento de segurança avançado.
-
Selecione SMS como seu Método de autenticação.
-
Na guia Canal SMS, configure as informações de conta do Vonage.
-
Se você ainda não tiver uma conta com o Vonage. Crie uma.
-
No painel do Vonage, clique em SMS.
-
Na seção Codifique você mesmo, copie a chave de API e cole-a na caixa chave no painel do App ID.
-
Copie o segredo da API no painel do Vonage e cole-o na caixa Segredo no painel do App ID.
-
Digite o ID do qual você deseja enviar mensagens. Um formato de número válido segue o formato de numeração internacional E.164. Por exemplo, um número dos EUA tem o formato
+19998887777. Deve-se especificar o código do país, começando com um símbolo+e o número do assinante nacional. Em alguns países, o Vonage suporta IDs de remetente alfanuméricos. O App ID usa o valor que você insere como ID de remetente do Vonage. Portanto, se eles forem suportados pelo Vonage, será possível usar os IDs com o App ID.
-
Com as APIs
Antes de começar a usar a API, certifique-se de que você tenha os pré-requisitos a seguir:
- O seu ID do locatário da instância do App ID. Esse ID pode ser localizado na seção Credenciais de serviço do painel.
- O seu token de Gerenciamento de identidade e acesso (IAM). Para obter ajuda com a obtenção de um token do IAM, consulte os docs do IAM.
-
Ative o MFA fazendo uma solicitação PUT para o terminal
/config/cloud_directory/mfacom a sua configuração do MFA para definirisActivecomotrue.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{"isActive": true}' -
Habilite seu canal MFA fazendo uma solicitação PUT para o ponto de extremidade
/mfa/channels/<channel>com sua configuração MFA. QuandoisActiveé configurado comotrue, seu canal da MFA está ativado. Aconfigassume a chave e o segredo da API Nexmo, bem como o númerofrom.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/nexmo' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{ "isActive": true, "config": { "key": "<nexmoKey>", "secret": "<nexmoSecret>", "from": <senderPhoneNumber> } }' -
Depois que o canal for configurado com êxito, verifique se a configuração e a conexão do Nexmo estão definidas corretamente usando o botão de teste no console ou usando a API de gerenciamento.
curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/sms_dispatcher/test \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{"phone_number": "+1 999 999 9999"}'
Estendendo a MFA
Com extensões, é possível levar a segurança de autenticação de diversos fatores para o próximo nível. Tomando decisões customizadas sobre quem é obrigado a fornecer um segundo formulário de autenticação, é possível fornecer uma experiência mais pessoal de seu app para os seus usuários. Também é possível usar extensões para auditar os comportamentos da MFA, como o número de autenticações de segundo formulário com falha.
Antes de Iniciar
Antes de você registrar a sua extensão, certifique-se de ter os pré-requisitos a seguir:
- O seu ID do locatário da instância do App ID. Esse ID pode ser localizado na seção Aplicativos do painel.
- O seu token de Gerenciamento de identidade e acesso (IAM). Para obter ajuda com a obtenção de um token do IAM, consulte os docs do IAM.
Para obter mais informações sobre as restrições e limitações de trabalhar com extensões, consulteLimites do App ID.
Configurando a pré-MFA
Com uma extensão pré-MFA, é possível definir os critérios que permitem que os usuários evitem ter que inserir um segundo formulário de autenticação quando interagem com o seu aplicativo.
- Quando um usuário se conecta ao seu aplicativo, o App ID envia uma solicitação de POST para a sua extensão.
- A sua extensão usa as informações da solicitação de POST para determinar se aquele usuário específico pode ignorar o segundo requisito do fator de autenticação com base nos critérios que você definiu.
- A sua configuração retorna uma resposta de JSON para o App ID que parece semelhante a
{'skipMfa': true}. - Com base na resposta de sua configuração, o App ID continua com o fluxo de MFA ou concede acesso ao seu aplicativo.
Por padrão, se ocorrer um erro durante a solicitação para o seu ponto de extensão, o App ID requererá que o usuário conclua o MFA.
Para configurar uma extensão pré-MFA:
-
Defina os critérios que você deseja que um usuário atenda antes que ele esteja apto a ignorar o segundo fator de autenticação. Consulte os exemplos a seguir para obter algumas ideias, se você não tiver certeza.
Exemplos de critérios para pular o MFA Caso de uso de exemplo Validação de exemplo Você deseja que os usuários forneçam um segundo fator de autenticação apenas uma vez por dia. Configure a sua extensão para validar que o last_successful_first_factorestá dentro do mesmo dia.Você tem uma lista de permissões de usuários aprovados que não precisam fornecer o segundo fator toda vez. Configure sua extensão para verificar se o usernameouuser_idestá na lista de permissões.Você não deseja que os usuários acessem o seu app em uma área de trabalho para fornecer o segundo fator toda vez. Configure a sua extensão para validar que o device_typeestá configurado comoweb. -
Quando você souber os seus critérios, configure uma extensão que possa atender uma solicitação de POST. O terminal deve estar apto a ler a carga útil que se origina do App ID. O corpo que é enviado pelo App ID antes do fluxo do MFA iniciar está no formato:
{"jws": "jws-format-string"}. A sua extensão também pode decodificar e validar a carga útil, o conteúdo é um objeto de JSON e retornar uma resposta de JSON com o esquema a seguir:{"skipMfa": Boolean }. Por exemplo,:{'skipMfa': true}.As informações que o App ID encaminha ao seu ponto de ramal. Informações Descrição correlation_idUm número aleatório que é gerado para cada sessão de MFA. Se você tiver tanto uma extensão pré-MFA quanto uma pós-MFA, o número será o mesmo para cada uma delas para a mesma sessão. Por exemplo, 3bb9236c-792f-4cca-8ae1-ada754cc4555.extensionO nome de sua extensão. Para esse caso de uso, a extensão é denominada premfa.device_typeO tipo de dispositivo com o qual o usuário está acessando o seu aplicativo. As opções incluem: webemobile.source_ipO endereço IP do dispositivo que faz a solicitação para o seu app. Por exemplo, 127.0.0.1.headersAs informações que são retornadas pelo navegador quando um usuário tenta se conectar a seu app. O cabeçalho é semelhante a: {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}.tenant_idO ID do locatário do seu aplicativo. client_idO ID do cliente do seu aplicativo. user_idO ID do usuário que faz a solicitação de autenticação. Por exemplo, 11112222-3333-4444-2222-555522226666.usernameO nome de usuário do usuário que faz a solicitação de autenticação. Por exemplo, testuser@email.com.application_typeO tipo do seu aplicativo. Por exemplo, se o seu aplicativo for um aplicativo da web JavaScript de página única, browserappserá retornado. As opções incluem:browserapp,serverappemobileapp.first_nameO nome dado pelos usuários. last_nameO sobrenome dos usuários. last_successful_first_factorA data da última vez em que o usuário inseriu corretamente as credenciais dele. Por exemplo, 1660032586651.last_successful_mfaA data da última vez em que o usuário concluiu o fluxo do MFA completo. Por exemplo, 1660032586651.Para ver um exemplo de extensão, confira a amostra.
-
Registre a sua extensão com a sua instância de App ID fazendo uma solicitação de PUT para
config/cloud_directory/mfa/extensions/premfa. A configuração inclui a URL do seu ramal e qualquer informação de autorização que seja necessária para acessar o terminal. Para fins de desenvolvimento,isActiveé configurado comofalse. Certifique-se de testar a sua configuração antes de ativá-la.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{ "isActive": false, "config": { "url": "<extensionsURL>", "headers": { "Authorization": "<customExtensionAuthorizationHeader>" } } }'É altamente recomendável que você sempre use HTTPS em vez de HTTP para o
extensions_URLpara assegurar que sua conexão seja criptografada. -
Depois que a extensão for configurada com sucesso, verifique se o seu terminal funciona corretamente usando a API de teste. O App ID faz uma solicitação POST para a sua extensão configurada com os valores de exemplo.
curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa/test \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' -
Ative a sua extensão fazendo uma solicitação de PUT que configure
isActivecomotrue.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{"isActive": true}'Para desativar a sua extensão, configure
isActivecomofalse.
Configurando a pós-MFA
Ao configurar uma extensão e registrá-la no App ID, o serviço chama a sua extensão após cada tentativa de autenticação na qual um segundo fator de identificação está presente. É possível usar essas informações para tomar as melhores decisões para seus usuários. Por exemplo, é possível usar informações de coleta da extensão pós-MFA para sua heurística e suas regras e, em seguida, aplicá-las usando a extensão pré-MFA.
-
Quando um usuário se conecta com sucesso ao seu aplicativo, é solicitado que ele insira o segundo fator de autenticação dele.
-
Quando o segundo fator de autenticação é concluído com sucesso, duas ações simultâneas ocorrem:
-
O App ID envia informações sobre a conexão à sua extensão configurada.
-
O usuário é redirecionado para o seu aplicativo.
-
Para configurar uma extensão pós-MFA:
-
Configure um ponto de extensão que possa atender a uma solicitação de POST. O terminal deve estar apto a ler a carga útil que é enviada por App ID. Opcionalmente, ele também pode decodificar e validar que a carga útil JSON que é retornada pelo App ID não é alterada por um terceiro de maneira alguma. É retornada uma sequência que é formatada como
{"jws": "jws-format-string"}que contém as informações a seguir:As informações que o App ID encaminha ao seu ponto de ramal. Informações Descrição correlation_idUm número aleatório que é gerado para cada sessão de MFA. Se você tiver tanto uma extensão pré-MFA quanto uma pós-MFA, o número será o mesmo para cada uma delas. Por exemplo, 3bb9236c-792f-4cca-8ae1-ada754cc4555.extensionO nome de sua extensão. Para esse caso de uso, a extensão é denominada postmfa.statusO status da MFA. As opções incluem: successefailed.reasonO motivo para uma falha da MFA. Por exemplo, user locked out - exceeded maximum number of verification attempts.device_typeO tipo de dispositivo com o qual o seu usuário acessa o seu aplicativo. As opções incluem: web,mobile.source_ipO endereço IP do dispositivo que faz a solicitação para o seu app. Por exemplo, 127.0.0.1.headersAs informações que são retornadas pelo navegador quando um usuário tenta se conectar a seu app. O cabeçalho é semelhante a {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}.tenant_idO ID do locatário do seu aplicativo. client_idO ID do cliente do seu aplicativo. user_idO ID do usuário que faz a solicitação de autenticação. usernameO nome de usuário do usuário que faz a solicitação de autenticação. Por exemplo, testuser@email.com.application_typeO tipo do seu aplicativo. Por exemplo, se o seu aplicativo for um aplicativo da web JavaScript de página única, browserappserá retornado. As opções incluem:browserapp,serverappemobileapp.first_nameO nome dado pelos usuários. last_nameO sobrenome dos usuários. -
Registre a sua extensão com a sua instância de App ID fazendo uma solicitação de PUT para
config/cloud_directory/mfa/extensions/postmfa. A configuração inclui a URL do seu ramal e qualquer informação de autorização que seja necessária para acessar o terminal. Para fins de desenvolvimento,isActiveé configurado comofalse. Certifique-se de testar a sua configuração antes de ativá-la.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{ "isActive": false, "config": { "url": "<extensionsURL>", "headers": { "Authorization": "<customExtensionAuthorizationHeader>" } } }'É altamente recomendável que você sempre use HTTPS em vez de HTTP para o extensions_URL para assegurar que sua conexão seja criptografada.
-
Depois que a extensão for configurada com sucesso, verifique se o seu terminal funciona corretamente usando a API de teste. O App ID faz uma solicitação de POST para a sua extensão configurada com os valores de exemplo.
curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa/test \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' -
Ative a sua extensão configurando
isActivecomotrue.curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{"isActive": true}'Para desativar a sua extensão, configure
isActivecomofalse.