Uso de un proveedor de autenticación multifactor personalizado a través de una API durante la activación de roles de PAM o en SSPR

Los clientes de MIM tienen dos opciones para la autenticación multifactor en los escenarios SSPR y PAM:

En este artículo se describe cómo usar MIM con un proveedor de autenticación multifactor personalizado, a través de una API y un SDK de integración desarrollado por el cliente.

Prerrequisitos

Para usar una API de proveedor de autenticación multifactor personalizada con MIM, necesita:

  • Números de teléfono para todos los usuarios candidatos
  • Revisión urgente de MIM 4.5.202.0 o posterior: consulte el historial de versiones para anuncios.
  • Servicio MIM configurado para SSPR o PAM

Método de autenticación multifactor con un código personalizado

Paso 1: Asegurarse de que el servicio MIM está en la versión 4.5.202.0 o posterior

Descargue e instale el hotfix de MIM 4.5.202.0 o una versión posterior.

Paso 2: Crear un archivo DLL que implemente la interfaz IPhoneServiceProvider

El archivo DLL debe incluir una clase , que implementa tres métodos:

  • InitiateCall: el servicio MIM invocará este método. El servicio pasa el número de teléfono y el identificador de solicitud como parámetros. El método debe devolver un PhoneCallStatus valor de Pending, Success o Failed.
  • GetCallStatus: Si una llamada anterior a initiateCall devolvió Pending, el servicio MIM invocará este método. Este método también devuelve PhoneCallStatus el valor de Pending, Success o Failed.
  • GetFailureMessage: si una invocación anterior de InitiateCall o GetCallStatus devuelta Failed, el servicio MIM invocará este método. Este método devuelve un mensaje de diagnóstico.

Las implementaciones de estos métodos deben ser seguras para subprocesos y, además, la implementación de GetCallStatus y GetFailureMessage no debe suponer que serán llamadas por el mismo subproceso que realizó una llamada anterior a InitiateCall.

Almacene el archivo DLL en el C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\ directorio .

Código de ejemplo, que se puede compilar con Visual Studio 2010 o 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;    
        }
    }
}

Paso 3: Guardar los MfaSettings existentes

Realice una copia de seguridad del MfaSettings.xml ubicado en la carpeta "C:\Archivos de programa\Microsoft Forefront Identity Manager\2010\Service".

Paso 4: Editar el archivo de MfaSettings.xml

Actualice o borre las líneas siguientes:

  • Quitar o borrar todas las líneas de entradas de configuración

  • Actualice o agregue las siguientes líneas a lo siguiente para MfaSettings.xml con el proveedor de teléfono personalizado
    <CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>

Paso 5: Reiniciar el servicio MIM

Una vez reiniciado el servicio, use SSPR o PAM para validar la funcionalidad con el proveedor de identidades personalizado.

Nota:

Para revertir la configuración, reemplace MfaSettings.xml por el archivo de copia de seguridad en el paso 3

Pasos siguientes