Прочитать на английском

Поделиться через


Использование пользовательского поставщика многофакторной аутентификации через API во время активации роли PAM или в SSPR

Клиенты MIM имеют два варианта многофакторной проверки подлинности в сценариях SSPR и PAM:

  • Используйте настраиваемого поставщика доставки одноразовых паролей, который применим только в сценарии MIM SSPR и описан в руководстве Настройка сброса пароля Self-Service через шлюз для SMS с одноразовым паролем (OTP).
  • Используйте персонализированного поставщика телефонной связи для многофакторной аутентификации. Это применимо как в сценариях 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. Если предыдущий вызов initiateCall возвращен Pending, служба MIM вызовет этот метод. Этот метод также возвращает значение PhoneCallStatus для Pending, Success или Failed.
  • GetFailureMessage. Если предыдущий вызов InitiateCall или GetCallStatus вернул Failed, служба MIM вызовет этот метод. Этот метод возвращает диагностическое сообщение.

Реализации этих методов должны быть потокобезопасны, и, кроме того, реализация 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.

Дальнейшие шаги