Używanie niestandardowego dostawcy uwierzytelniania wieloskładnikowego za pośrednictwem interfejsu API podczas aktywacji roli usługi PAM lub samoobsługowego resetowania hasła
Klienci programu MIM mają dwie opcje uwierzytelniania wieloskładnikowego w scenariuszach samoobsługowego resetowania hasła i usługi PAM:
- Użyj niestandardowego dostawcy dostarczania haseł jednorazowych, który ma zastosowanie tylko w scenariuszu samoobsługowego resetowania hasła programu MIM i udokumentowany w przewodniku Konfigurowanie resetowania haseł Self-Service za pomocą bramy programu OTP SMS
- Użyj niestandardowego dostawcy telefonii uwierzytelniania wieloskładnikowego. Dotyczy to zarówno scenariuszy samoobsługowego resetowania hasła programu MIM, jak i funkcji PAM opisanych w tym artykule
W tym artykule opisano sposób używania programu MIM z niestandardowym dostawcą uwierzytelniania wieloskładnikowego za pośrednictwem interfejsu API i zestawu SDK integracji opracowanego przez klienta.
Wymagania wstępne
Aby używać niestandardowego interfejsu API dostawcy uwierzytelniania wieloskładnikowego z programem MIM, potrzebne są następujące elementy:
- Numery telefonów wszystkich użytkowników kandydujących
- Poprawka programu MIM 4.5.202.0 lub nowsza — zobacz historię wersji anonsów
- Usługa MIM skonfigurowana dla samoobsługowego resetowania hasła lub usługi PAM
Podejście przy użyciu niestandardowego kodu uwierzytelniania wieloskładnikowego
Krok 1. Upewnij się, że usługa MIM jest w wersji 4.5.202.0 lub nowszej
Pobierz i zainstaluj poprawkę programu MIM 4.5.202.0 lub nowszą.
Krok 2. Tworzenie biblioteki DLL implementujących interfejs IPhoneServiceProvider
Biblioteka DLL musi zawierać klasę, która implementuje trzy metody:
-
InitiateCall
: Usługa MIM wywoła tę metodę. Usługa przekazuje numer telefonu i identyfikator żądania jako parametry. Metoda musi zwrócićPhoneCallStatus
wartośćPending
typu ,Success
lubFailed
. -
GetCallStatus
: Jeśli wcześniejsze wywołanieinitiateCall
metody zwróci wartośćPending
, usługa MIM wywoła tę metodę. Ta metoda zwracaPhoneCallStatus
również wartośćPending
typu ,Success
lubFailed
. -
GetFailureMessage
: Jeśli poprzednie wywołanieInitiateCall
metody lubGetCallStatus
zwróciFailed
wartość , usługa MIM wywoła tę metodę. Ta metoda zwraca komunikat diagnostyczny.
Implementacje tych metod muszą być bezpieczne wątkami, a ponadto implementacja GetCallStatus
elementu i GetFailureMessage
nie może zakładać, że będą one wywoływane przez ten sam wątek co wcześniejsze wywołanie metody InitiateCall
.
Zapisz bibliotekę DLL w C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\
katalogu .
Przykładowy kod, który można skompilować przy użyciu programu Visual Studio 2010 lub nowszego.
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;
}
}
}
Krok 3. Zapisywanie istniejących ustawień MfaSettings
Należy utworzyć kopię zapasową MfaSettings.xml znajdującą się w folderze "C:\Program Files\Microsoft Forefront Identity Manager\2010\Service".
Krok 4. Edytowanie pliku MfaSettings.xml
Zaktualizuj lub wyczyść następujące wiersze:
Usuń/wyczyść wszystkie wiersze wpisów konfiguracji
Zaktualizuj lub dodaj następujące wiersze, aby MfaSettings.xml z niestandardowym dostawcą telefonu
<CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>
Krok 5. Ponowne uruchamianie usługi MIM
Po ponownym uruchomieniu usługi użyj samoobsługowego resetowania hasła i/lub usługi PAM, aby zweryfikować funkcjonalność u niestandardowego dostawcy tożsamości.
Uwaga
Aby przywrócić ustawienie, zastąp MfaSettings.xml plikiem kopii zapasowej w kroku 3