Utiliser un fournisseur Multi-Factor Authentication personnalisé par le biais d’une API durant l’activation du rôle PAM ou dans SSPR

Les clients d’Azure AD Premium ou d’Azure MFA peuvent intégrer Azure MFA dans deux scénarios MIM : activation de rôle Privileged Access Management (PAM) et réinitialisation de mot de passe libre-service (SSPR).

Les clients MIM disposent de deux options supplémentaires :

Cet article explique comment utiliser MIM avec un fournisseur Multi-Factor Authentication personnalisé par le biais d’une API et d’un SDK d’intégration développé par le client.

Prérequis

Pour utiliser l’API d’un fournisseur Multi-Factor Authentication personnalisé avec MIM, vous avez besoin des éléments suivants :

  • numéros de téléphone de tous les utilisateurs candidats.
  • Correctif logiciel MIM 4.5.202.0 ou ultérieur (consultez l’historique des versions pour parcourir les annonces)
  • Service MIM configuré pour SSPR ou PAM

Approche à l’aide d’un code Multi-Factor Authentication personnalisé

Étape 1 : Vérifier que la version du service MIM est au minimum 4.5.202.0

Téléchargez et installez le correctif logiciel MIM 4.5.202.0 ou ultérieur.

Étape 2 : Créer une DLL qui implémente l’interface IPhoneServiceProvider

La DLL doit inclure une classe qui implémente trois méthodes :

  • InitiateCall : le service MIM appelle cette méthode. Le service passe le numéro de téléphone et l’ID de requête comme paramètres. La méthode doit retourner PhoneCallStatus (ayant pour valeur Pending, Success ou Failed).
  • GetCallStatus : si un appel précédent à initiateCall a retourné Pending, le service MIM appelle cette méthode. Cette méthode retourne également PhoneCallStatus (ayant pour valeur Pending, Success ou Failed).
  • GetFailureMessage : si une invocation précédente de InitiateCall ou GetCallStatus a retourné Failed, le service MIM appelle cette méthode. Cette méthode retourne un message de diagnostic.

Les implémentations de ces méthodes doivent être thread-safe. De plus, l’implémentation des méthodes GetCallStatus et GetFailureMessage ne doit pas supposer qu’elles seront appelées par le même thread que celui utilisé lors d’un appel précédent à InitiateCall.

Stockez la DLL dans le répertoire C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\.

Vous pouvez compiler l’exemple de code à l’aide de Visual Studio 2010 ou ultérieur.

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

Étape 3 : Sauvegarder MfaSettings.xml situé dans C:\Program Files\Microsoft Forefront Identity Manager\2010\Service

Étape 4 : Modifier le fichier MfaSettings.xml

Mettez à jour ou effacez les lignes suivantes :

  • Supprimez/effacez toutes les lignes des entrées de configuration

  • Mettez à jour ou ajoutez les lignes suivantes à ce qui suit dans MfaSettings.xml avec votre fournisseur de téléphonie personnalisé
    <CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>

Étape 5 : Redémarrer le Service MIM

Une fois le service redémarré, utilisez SSPR et/ou PAM pour valider les fonctionnalités avec le fournisseur d’identité personnalisé.

Notes

Pour rétablir les paramètres, remplacez MfaSettings.xml par votre fichier de sauvegarde créé à l’étape 3

Étapes suivantes