在 PAM 角色激活期间或在 SSPR 中通过 API 使用自定义多重身份验证提供程序
MIM 客户在 SSPR 和 PAM 方案中有两种多重身份验证选项:
- 使用自定义一次性密码提供程序,这只适用于 MIM SSPR 方案和有案可稽的指南使用 OTP SMS 入口配置自助密码重置
- 使用自定义多重身份验证电话服务提供程序。 这同时适用于 MIM SSPR 和 PAM 方案,如本文中所述
本文概述如何通过客户开发的 API 和集成 SDK,结合使用自定义多重身份验证提供程序和 MIM。
先决条件
若要将自定义多重身份验证提供程序 API 与 MIM 配合使用,需要:
- 适用于所有候选用户的电话号码
- MIM 修补程序 4.5.202.0 或更高版本 - 请查阅版本历史记录,了解相关公告
- 针对 SSPR 或 PAM 配置的 MIM 服务
使用自定义多重身份验证代码的方法
步骤 1:确保 MIM 服务为 4.5.202.0 版本或更高版本
下载并安装 MIM 修补程序 4.5.202.0 或更高版本。
步骤 2:创建可实现 IPhoneServiceProvider 接口的 DLL
DLL 必须包括一个可实现以下三种方法的类:
InitiateCall
:MIM 服务会调用此方法。 该服务将以参数的形式传递手机号和请求 ID。 该方法必须返回为Pending
、Success
或Failed
的PhoneCallStatus
值。GetCallStatus
:如果之前对initiateCall
的调用返回Pending
,MIM 服务将调用此方法。 此方法也会返回为Pending
、Success
或Failed
的PhoneCallStatus
值。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
备份位于“C:\Program Files\Microsoft Forefront Identity Manager\2010\Service”文件夹中的MfaSettings.xml。
步骤 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 中的备份文件