Usar um provedor de autenticação multifator personalizado por meio de uma API durante a ativação da função PAM ou no SSPR
Os clientes do MIM têm duas opções para autenticação multifator nos cenários SSPR e PAM:
- Usar um provedor de entrega de senha avulsa personalizado, que é aplicável apenas no cenário de SSPR do MIM e documentado no guia para Configurar o Autoatendimento de Redefinição de Senha com o portão de SMS com OTP
- Use um provedor de telefonia de autenticação multifator personalizado. Isso é aplicável no cenário de SSPR do MIM e no cenário do PAM, ambos descritos neste artigo
Este artigo descreve como usar o MIM com um provedor de autenticação multifator personalizado, por meio de uma API e um SDK de integração desenvolvido pelo cliente.
Pré-requisitos
Para usar uma API de provedor de autenticação multifator personalizada com MIM, você precisa:
- Números de telefone para todos os usuários candidatos
- Hotfix do MIM 4.5.202.0 ou posterior: confira o histórico de versões de comunicados
- Serviço MIM configurado para SSPR ou PAM
Abordagem usando código personalizado de autenticação multifator
Etapa 1: verifique se o serviço MIM está na versão 4.5.202.0 ou posterior
Baixe e instale o hotfix 4.5.202.0 do MIM ou uma versão posterior.
Etapa 2: criar uma DLL que implemente a interface IPhoneServiceProvider
A DLL deve incluir uma classe que implemente três métodos:
InitiateCall
: o serviço MIM invocará esse método. O serviço passa a ID de solicitação e de número de telefone como parâmetros. O método precisa retornar um valor dePhoneCallStatus
igual aPending
,Success
ouFailed
.GetCallStatus
: se uma chamada anterior parainitiateCall
tiver retornadoPending
, o serviço MIM invocará esse método. Esse método também retorna um valor dePhoneCallStatus
igual aPending
,Success
ouFailed
.GetFailureMessage
: se uma invocação anterior deInitiateCall
ouGetCallStatus
tiver retornadoFailed
, o serviço MIM invocará esse método. Esse método retorna uma mensagem de diagnóstico.
As implementações desses métodos devem ser thread safe e, além disso, a implementação do GetCallStatus
e GetFailureMessage
não devem assumir que eles serão chamados pelo mesmo thread que uma chamada anterior para InitiateCall
.
Armazene a DLL no diretório C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\
.
Código de exemplo, que pode ser compilado usando o Visual Studio 2010 ou posterior.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.IdentityManagement.PhoneServiceProvider;
namespace CustomPhoneGate
{
public class CustomPhoneGate: IPhoneServiceProvider
{
string path = @"c:\Test\phone.txt";
public PhoneCallStatus GetCallStatus(string callId)
{
int res = 2;
foreach (string line in File.ReadAllLines(path))
{
var info = line.Split(new char[] { ';' });
if (string.Compare(info[0], callId) == 0)
{
if (info.Length > 2)
{
bool b = Int32.TryParse(info[2], out res);
if (!b)
{
res = 2;
}
}
break;
}
}
switch(res)
{
case 0:
return PhoneCallStatus.Pending;
case 1:
return PhoneCallStatus.Success;
case 2:
return PhoneCallStatus.Failed;
default:
return PhoneCallStatus.Failed;
}
}
public string GetFailureMessage(string callId)
{
string res = "Call ID is not found";
foreach (string line in File.ReadAllLines(path))
{
var info = line.Split(new char[] { ';' });
if (string.Compare(info[0], callId) == 0)
{
if (info.Length > 2)
{
res = info[3];
}
else
{
res = "Description is not found";
}
break;
}
}
return res;
}
public PhoneCallStatus InitiateCall(string phoneNumber, Guid requestId, Dictionary<string,object> deliveryAttributes)
{
// Here should be some logic for performing voice call
// For testing purposes we just write details in file
string info = string.Format("{0};{1};{2};{3}", requestId, phoneNumber, 0, string.Empty);
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(info);
}
return PhoneCallStatus.Pending;
}
}
}
Etapa 3: Salvar os MfaSettings existentes
Faça backup do MfaSettings.xml localizado na pasta "C:\Arquivos de Programas\Microsoft Forefront Identity Manager\2010\Service".
Etapa 4: edite o arquivo MfaSettings.xml
Atualize ou desmarque as linhas a seguir:
Remover/desmarcar todas as linhas de entradas de configuração
Atualizar ou adicionar as linhas a seguir ao seguinte a MfaSettings.xml com o seu provedor de telefone personalizado
<CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>
Etapa 5: reiniciar o serviço MIM
Depois que o serviço for reiniciado, use o SSPR e/ou o PAM para validar a funcionalidade com o provedor de identidade personalizado.
Observação
Para reverter a configuração, substitua MfaSettings.xml pelo arquivo de backup na etapa 3