Sdílet prostřednictvím


Použití vlastního zprostředkovatele vícefaktorového ověřování prostřednictvím rozhraní API během aktivace role PAM nebo v SSPR

Zákazníci MIM mají dvě možnosti vícefaktorového ověřování ve scénářích SSPR a PAM:

Tento článek popisuje, jak používat MIM s vlastním poskytovatelem vícefaktorového ověřování prostřednictvím rozhraní API a integrační sady SDK vyvinuté zákazníkem.

Požadavky

Abyste mohli s MIM používat vlastní rozhraní API zprostředkovatele vícefaktorového ověřování, potřebujete:

  • Telefonní čísla pro všechny kandidáty
  • Oprava hotfix MIM 4.5.202.0 nebo novější – oznámení najdete v historii verzí .
  • Služba MIM nakonfigurovaná pro SSPR nebo PAM

Přístup s využitím vlastního kódu vícefaktorového ověřování

Krok 1: Ujistěte se, že je služba MIM ve verzi 4.5.202.0 nebo novější.

Stáhněte a nainstalujte opravu hotfix MIM 4.5.202.0 nebo novější.

Krok 2: Vytvoření knihovny DLL, která implementuje rozhraní IPhoneServiceProvider

Knihovna DLL musí obsahovat třídu, která implementuje tři metody:

  • InitiateCall: Služba MIM vyvolá tuto metodu. Služba předá telefonní číslo a ID požadavku jako parametry. Metoda musí vracet PhoneCallStatus hodnotu Pending, Success nebo Failed.
  • GetCallStatus: Pokud se vrátí Pendingdřívější volání initiateCall , služba MIM vyvolá tuto metodu. Tato metoda také vrátí PhoneCallStatus hodnotu Pending, Success nebo Failed.
  • GetFailureMessage: Pokud se předchozí vyvolání InitiateCall nebo GetCallStatus vrátí Failed, služba MIM vyvolá tuto metodu. Tato metoda vrátí diagnostickou zprávu.

Implementace těchto metod musí být bezpečné z více vláken, a navíc implementace GetCallStatus a GetFailureMessage nesmí předpokládat, že budou volány stejným vláknem jako dřívější volání .InitiateCall

Uložte knihovnu DLL do C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\ adresáře.

Ukázkový kód, který lze zkompilovat pomocí sady Visual Studio 2010 nebo novější.

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: Uložení existujícího MfaSettings

Zálohujte MfaSettings.xml umístěný ve složce C:\Program Files\Microsoft Forefront Identity Manager\2010\Service.

Krok 4: Úprava souboru MfaSettings.xml

Aktualizujte nebo vymažte následující řádky:

  • Odebrat nebo vymazat všechny řádky položek konfigurace

  • Aktualizujte nebo do následujících řádků přidejte následující řádky, abyste MfaSettings.xml s vaším vlastním poskytovatelem telefonních služeb.
    <CustomPhoneProvider>C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\CustomPhoneGate.dll</CustomPhoneProvider>

Krok 5: Restartování služby MIM

Po restartování služby pomocí SSPR nebo PAM ověřte funkčnost pomocí vlastního zprostředkovatele identity.

Poznámka

Pokud chcete vrátit nastavení zpět, nahraďte MfaSettings.xml záložním souborem v kroku 3.

Další kroky