Utiliser un fournisseur d’authentification multifacteur personnalisé via une API lors de l’activation du rôle PAM ou dans SSPR
Les clients MIM ont deux options pour l’authentification multifacteur dans les scénarios SSPR et PAM :
- Utiliser un fournisseur de remise de mot de passe à usage unique personnalisé, applicable uniquement au scénario MIM SSPR et documenté dans le guide Configurer la réinitialisation de mot de passe libre-service avec la porte de messages texte du mot de passe à usage unique
- Utiliser un fournisseur de téléphonie Multi-Factor Authentication personnalisé. Applicable aux scénarios MIM SSPR et PAM décrits dans cet article
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 une API de fournisseur d’authentification multifacteur personnalisée 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 retournerPhoneCallStatus
(ayant pour valeurPending
,Success
ouFailed
).GetCallStatus
: si un appel précédent àinitiateCall
a retournéPending
, le service MIM appelle cette méthode. Cette méthode retourne égalementPhoneCallStatus
(ayant pour valeurPending
,Success
ouFailed
).GetFailureMessage
: si une invocation précédente deInitiateCall
ouGetCallStatus
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, et en outre, l’implémentation du GetCallStatus
thread et GetFailureMessage
ne doit pas supposer qu’elles seront appelées par le même thread qu’un appel antérieur à 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 : Enregistrer les MfaSettings existants
Sauvegardez le MfaSettings.xml situé dans le dossier « 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