Verwenden eines benutzerdefinierten mehrstufigen Authentifizierungsanbieters über eine API während der PAM-Rollenaktivierung oder in SSPR
MIM-Kunden haben zwei Optionen für die mehrstufige Authentifizierung in den SSPR- und PAM-Szenarien:
- Verwenden eines benutzerdefinierten Einmalkennwortanbieters, der nur im MIM SSPR-Szenario anwendbar ist und in der Anleitung Configure Self-Service Password Reset with OTP SMS Gate (Konfigurieren der Self-Service-Kennwortzurücksetzung mit OTP SMS-Gate) dokumentiert ist.
- Verwenden Sie einen benutzerdefinierten Telefonanbieter mit mehrstufiger Authentifizierung. Dies gilt für die in diesem Artikel beschriebenen Szenarios für MIM SSPR und PAM.
In diesem Artikel wird beschrieben, wie Sie MIM mit einem benutzerdefinierten Multi-Factor Authentication-Anbieter über eine API und ein vom Kunden entwickeltes SDK für die Integration verwenden.
Voraussetzungen
Um eine benutzerdefinierte mehrstufige Authentifizierungsanbieter-API mit MIM zu verwenden, benötigen Sie Folgendes:
- Telefonnummern für alle Kandidatenbenutzer
- MIM-Hotfix 4.5.202.0 oder höher: siehe Ankündigungen im Versionsverlauf
- MIM-Dienst für SSPR oder PAM konfiguriert
Vorgehensweise mithilfe von Code für benutzerdefinierte mehrstufige Authentifizierung
Schritt 1: Stellen Sie sicher, dass der MIM-Dienst die Version 4.5.202.0 oder höher aufweist.
Laden Sie den MIM-Hotfix 4.5.202.0 oder höher herunter, und installieren Sie diesen.
Schritt 2: Erstellen Sie eine DLL, die die IPhoneServiceProvider-Schnittstelle implementiert.
Die DLL muss eine Klasse enthalten, die drei Methoden implementiert:
InitiateCall
: Der MIM-Dienst ruft diese Methode auf. Der Dienst übergibt die Telefonnummer und Anforderung-ID als Parameter. Die Methode muss für denPhoneCallStatus
-WertPending
,Success
oderFailed
zurückgeben.GetCallStatus
: Wenn für einen früheren Aufruf voninitiateCall
Pending
zurückgegeben wurde, ruft der MIM-Dienst diese Methode auf. Diese Methode gibt für denPhoneCallStatus
-WertPending
,Success
oderFailed
zurück.GetFailureMessage
: Wenn für einen früheren Aufruf vonInitiateCall
oderGetCallStatus
Failed
zurückgegeben wurde, ruft der MIM-Dienst diese Methode auf. Diese Methode gibt eine diagnostische Meldung zurück.
Die Implementierungen dieser Methoden müssen threadsicher sein, und darüber hinaus müssen die Implementierung der GetCallStatus
und GetFailureMessage
darf nicht davon ausgehen, dass sie von demselben Thread wie ein früherer Aufruf InitiateCall
aufgerufen werden.
Speichern Sie die DLL im C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\
-Verzeichnis.
Beispielcode, der mithilfe von Visual Studio 2010 oder höher erstellt werden kann.
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;
}
}
}
Schritt 3: Speichern der vorhandenen MfaSettings
Sichern Sie die MfaSettings.xml im Ordner "C:\Program Files\Microsoft Forefront Identity Manager\2010\Service".
Schritt 4: Bearbeiten Sie die MfaSettings.xml-Datei.
Aktualisieren oder löschen Sie die folgenden Zeilen:
Alle Konfigurationeintragszeilen entfernen/löschen
Aktualisieren Sie die folgenden Zeilen, oder fügen Sie diese mit Ihrem benutzerdefinierten Telefonanbieter der MfaSettings.xml-Datei hinzu.
<CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>
Schritt 5: Starten Sie den MIM-Dienst neu.
Verwenden Sie nach dem Neustart des Diensts SSPR und/oder PAM, um die Funktion mit dem benutzerdefinierten Identitätsanbieter zu überprüfen.
Hinweis
Ersetzen Sie zum Wiederherstellen Ihrer Einstellung MfaSettings.xml durch die Sicherungsdatei aus Schritt 3.