Condividi tramite


Usare un provider di autenticazione a più fattori personalizzato tramite un'API durante l'attivazione del ruolo PAM o la reimpostazione della password self-service

I clienti MIM hanno due opzioni per l'autenticazione a più fattori negli scenari SSPR e PAM:

  • Usare un provider di recapito con password monouso, applicabile solo nello scenario MIM SSPR e documentato nella guida in Configure Self-Service Password Reset with OTP SMS Gate (Configurare il ripristino della password self-service con controllo OTP SMS)
  • Usare un provider di telefonia con autenticazione a più fattori personalizzata. Questa opzione è applicabile a entrambi gli scenari MIM SSPR e PAM descritti in questo articolo

L'articolo illustra come usare MIM con un provider di autenticazione a più fattori personalizzato tramite un'API e un SDK di integrazione sviluppato dal cliente.

Prerequisiti

Per usare un'API del provider di autenticazione a più fattori personalizzata con MIM, è necessario:

  • Numeri di telefono di tutti gli utenti candidati
  • Hotfix MIM 4.5.202.0 o successive, vedere la cronologia versioni per gli annunci corrispondenti
  • Servizio MIM configurato per SSPR o PAM

Approccio con codice di autenticazione a più fattori personalizzato

Passaggio 1: Verificare che la versione del servizio MIM sia 4.5.202.0 o successiva

Scaricare e installare l'hotfix MIM 4.5.202.0 o una versione successiva.

Passaggio 2: Creare una DLL che implementa l'interfaccia IPhoneServiceProvider

La DLL deve includere una classe che implementa tre metodi:

  • InitiateCall: il servizio MIM chiama questo metodo. Il servizio passa il numero di telefono e l'ID richiesta come parametri. Il metodo deve restituire un valore PhoneCallStatus pari a Pending, Success o Failed.
  • GetCallStatus: se una chiamata precedente a initiateCall ha restituito Pending, il servizio MIM chiama questo metodo. Questo metodo restituisce anche un valore PhoneCallStatus pari a Pending, Success o Failed.
  • GetFailureMessage: se una chiamata precedente di InitiateCall o GetCallStatus ha restituito Failed, il servizio MIM chiama questo metodo. Questo metodo restituisce un messaggio di diagnostica.

Le implementazioni di questi metodi devono essere thread-safe e, inoltre, l'implementazione di GetCallStatus e GetFailureMessage non deve presupporre che vengano chiamate dallo stesso thread di una chiamata precedente a InitiateCall.

Archiviare la DLL nella directory C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\.

Codice di esempio che può essere compilato con Visual Studio 2010 o versione successiva.

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;    
        }
    }
}

Passaggio 3: Salvare le impostazioni MfaSettings esistenti

Eseguire il backup della MfaSettings.xml nella cartella "C:\Programmi\Microsoft Forefront Identity Manager\2010\Service".

Passaggio 4: Modificare il file MfaSettings.xml

Aggiornare o cancellare le righe seguenti:

  • Rimuovere o cancellare tutte le righe di voci di configurazione

  • Aggiornare o aggiungere le righe seguenti in MfaSettings.xml con il provider di telefonia personalizzato
    <CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>

Passaggio 5: Riavviare il servizio MIM

Dopo il riavvio del servizio, usare SSPR e/o PAM per convalidare la funzionalità con il provider di identità personalizzato.

Nota

Per annullare le impostazioni, sostituire il file MfaSettings.xml con il file di backup creato nel passaggio 3

Passaggi successivi