Использование пользовательского поставщика многофакторной проверки подлинности через API во время активации роли PAM или в SSPR
Клиенты MIM имеют два варианта многофакторной проверки подлинности в сценариях SSPR и PAM:
- Использовать настраиваемый поставщик доставки одноразового пароля, который применим только в сценарии MIM SSPR и описан в руководстве Настройка самостоятельного сброса пароля с помощью шлюза OTP SMS.
- Использовать настраиваемый поставщик служб телефонии для многофакторной идентификации. Этот вариант подходит для сценариев MIM SSPR и PAM, приведенных в этой статье.
В этой статье описывается, как использовать MIM с настраиваемым поставщиком многофакторной идентификации с помощью API и пакета SDK интеграции, разработанного клиентом.
Предварительные условия
Чтобы использовать пользовательский API поставщика многофакторной идентификации с MIM, вам потребуется:
- Номера телефонов всех пользователей-кандидатов
- Исправление MIM 4.5.202.0 или более поздней версии — объявления см. в журнале версий
- Служба MIM, настроенная для SSPR или PAM
Подход с использованием пользовательского кода многофакторной идентификации
Шаг 1. Использование службы MIM версии 4.5.202.0 или более поздней
Скачайте и установите исправление MIM 4.5.202.0 или более поздней версии.
Шаг 2. Создание библиотеки DLL, реализующей интерфейс IPhoneServiceProvider
Библиотека DLL должна содержать класс, который реализует три метода.
InitiateCall
. Этот метод будет вызываться службой MIM. Служба передает телефонный номер и идентификатор запроса в качестве параметров. Метод должен вернуть значениеPhoneCallStatus
, равноеPending
,Success
илиFailed
.GetCallStatus
. Служба MIM вызовет этот метод, если предыдущий вызовinitiateCall
вернулPending
. Этот метод также возвращает значениеPhoneCallStatus
, равноеPending
,Success
илиFailed
.GetFailureMessage
. Служба MIM вызовет этот метод, если предыдущий вызовInitiateCall
илиGetCallStatus
вернулFailed
. Этот метод возвращает диагностическое сообщение.
Реализации этих методов должны быть потокобезопасны, а также реализация GetCallStatus
и GetFailureMessage
не должна предполагать, что они будут вызваны тем же потоком, что и предыдущий вызов InitiateCall
.
Сохраните DLL в каталоге C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\
.
Ниже приведен пример кода, который можно скомпилировать с помощью Visual Studio 2010 или более поздней версии.
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;
}
}
}
Шаг 3. Сохранение существующих MfaSettings
Создайте резервную копию MfaSettings.xml, расположенную в папке C:\Program Files\Microsoft Forefront Identity Manager\2010\Service.
Шаг 4. Изменение файла MfaSettings.xml
Измените или очистите следующие строки:
Удалите или очистите все строки записей конфигурации.
Обновите или добавьте следующие строки в файл MfaSettings.xml для настраиваемого поставщика служб телефонии.
<CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>
Шаг 5. Перезапуск службы MIM
После перезапуска службы используйте SSPR и (или) PAM для проверки функциональных возможностей с помощью настраиваемого поставщика удостоверений.
Примечание
Чтобы отменить изменения, замените файл MfaSettings.xml файлом резервной копии, созданным на шаге 3.