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 de SSPR y PAM:

  • Usar un proveedor de entrega de contraseña de un solo uso, que es aplicable únicamente en el escenario de SSPR de MIM y se documenta en la guía Configure Self-Service Password Reset with OTP SMS Gate (Configurar Autoservicio de restablecimiento de contraseña con Puerta de SMS de OTP).
  • Usar un proveedor de telefonía de autenticación multifactor personalizada. Esto es aplicable en los escenarios de PAM y SSPR de MIM que se describen en este artículo.

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

Requisitos previos

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

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

Método mediante el código de autenticación multifactor personalizada

Paso 1: Asegurarse de que la versión del servicio MIM es 4.5.202.0 o posterior

Descargue e instale la revisión 4.5.202.0 de MIM (o una versión posterior).

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

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

  • InitiateCall: el servicio MIM invocará este método. El servicio pasa el identificador de solicitud y el número de teléfono como parámetros. El método debe devolver un valor PhoneCallStatus 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 el valor PhoneCallStatus de Pending, Success o Failed.
  • GetFailureMessage: si una llamada anterior a InitiateCall o GetCallStatus devolvió 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 se llamarán mediante el mismo subproceso que una llamada anterior a InitiateCall.

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

Código de ejemplo que puede ser compilado mediante 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 MfaSettings.xml

Actualice o desactive las líneas siguientes:

  • Quite o borre todas las líneas de entradas de configuración

  • Actualice o agregue las líneas siguientes al MfaSettings.xml siguiente con su 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 y/o PAM para validar las funciones con el proveedor de identidades personalizado.

Nota:

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

Pasos siguientes