你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

保护基于电话的多重身份验证

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

借助Microsoft Entra 多重身份验证,用户可以选择在注册进行验证的电话号码处接收自动语音呼叫。 恶意用户可以通过创建多个帐户并拨打电话来利用此方法,而无需完成 MFA 注册过程。 这些失败的注册可能会耗尽允许的注册尝试,从而阻止其他用户在 Azure AD B2C 租户中注册新帐户。 为了帮助防止这些攻击,可以使用 Azure Monitor 监视电话身份验证失败并缓解欺诈性注册。

重要

验证器应用(TOTP)提供比 SMS/Phone 多重身份验证更强大的安全性。 若要设置此项,请阅读有关 在 Azure Active Directory B2C 中启用多重身份验证的说明。

先决条件

在开始之前,请创建 Log Analytics 工作区

创建基于手机的 MFA 事件工作簿

GitHub 中的 Azure AD B2C 报表和警报 存储库包含可用于基于 Azure AD B2C 日志创建和发布报表、警报和仪表板的项目。 下图所示的草稿工作簿重点介绍了与电话相关的失败情况。

“概述”选项卡

概述 ”选项卡上显示了以下信息:

  • 失败原因(每个给定原因的电话身份验证失败总数)
  • 由于信誉不良而被阻止
  • 具有失败电话身份验证的 IP 地址(每个给定 IP 地址的失败电话身份验证总数)
  • 与 IP 地址关联的电话号码 - 电话验证失败
  • 浏览器(按客户端浏览器统计的电话身份验证失败情况)
  • 操作系统(每个客户端操作系统上的电话身份验证失败)

“概述”选项卡

“详细信息”选项卡

在“ 详细信息 ”选项卡上报告以下信息:

  • Azure AD B2C 策略 - 电话身份验证失败
  • 按电话号码列出的电话身份验证失败 - 时间图表(可调整的时间线)
  • Azure AD B2C 策略的电话身份验证失败 - 时间图表(可调整的时间线)
  • 按 IP 地址列出的电话身份验证失败 - 时间图表(可调整的时间线)
  • 选择电话号码以查看失败详细信息(选择电话号码以获取详细故障列表)

详细信息选项卡 1(共 3 个)

详细信息选项卡 2(共 3 个)

“详细信息”选项卡 3(共 3 个)

使用工作簿来识别欺诈性注册

可以使用工作簿来了解基于电话的 MFA 事件,并确定对电话服务的潜在恶意使用。

  1. 通过回答以下问题了解租户的正常情况:

    • 你期望的基于电话的 MFA 来自哪些地区?
    • 检查基于电话的 MFA 尝试失败所显示的原因;是否正常或在意料中?
  2. 识别欺诈性注册的特征:

    • 基于位置:检查“电话身份验证失败(按 IP 地址)”,查找是否有任何与不希望用户注册的位置相关联的帐户。

    注释

    提供的 IP 地址是大致区域。

    • 基于速度:查看“近期失败的身份验证(按天)”,这其中指示了每天拨打异常号码,导致电话身份验证尝试失败的电话号码,按照从最高(左)到最低(右)的顺序排列。
  3. 按照下一部分中的步骤,减少欺诈性注册。

缓解用户流中的欺诈性注册

采取以下措施来帮助缓解欺诈性注册。

  • 使用 建议 版本的用户流来执行以下操作:

  • 从用户验证其电话号码的下拉菜单中删除与组织无关的国家/地区代码(此更改将适用于将来的注册):

    1. 以 Azure AD B2C 租户的外部 ID 用户流管理员身份登录到 Azure 门户

    2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。

    3. 选择 Azure 门户左上角的“所有服务”,搜索并选择 Azure AD B2C

    4. 选择用户流,然后选择“ 语言”。 选择组织的主要地理位置的语言以打开语言详细信息面板。 (在本示例中,我们将为美国选择 英语 en )。 选择“多重身份验证”页,然后选择“下载默认值”(en)。

      上传新的重写项,以下载默认值

    5. 打开在上一步中下载的 JSON 文件。 在文件中,搜索 DEFAULT行并将其替换为 "Value": "{\"DEFAULT\":\"Country/Region\",\"US\":\"United States\"}"。 请务必将Overrides设置为true

若要有效实现短信拦截,请确保仅针对组织的主要或默认语言启用“替代”设置(设置为 true)。 不要为任何辅助语言或非主要语言启用“替代”,因为这可能会导致意外的短信拦截。 由于 JSON 文件中的国家/地区列表充当允许列表,因此在 Overrides 为 true 时,请确保包含应允许在此列表中发送短信的所有国家/地区,以用于主要语言配置。

注释

可以在元素中 countryList 自定义允许的国家/地区代码列表(请参阅 电话因素身份验证页示例)。

  1. 保存 JSON 文件。 在语言详细信息面板中的 “上传新替代”下,选择要上传的修改后的 JSON 文件。

  2. 关闭面板并选择“ 运行用户流”。 对于此示例,请确认 美国 是下拉列表中唯一可用的国家/地区代码:

    国家/地区代码下拉列表

缓解自定义策略中的欺诈性注册

为了帮助防止欺诈性注册,请按照以下步骤删除不适用于组织的任何国家/地区代码:

  1. 找到定义 RelyingParty 的策略文件。 例如,在 初学者包中,这通常是 SignUpOrSignin.xml 文件。 请参阅以下代码片段。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_signup_signin" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin">
    
     <BasePolicy>
       <TenantId>yourtenant.onmicrosoft.com</TenantId>
       <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
     </BasePolicy>
    
     <BuildingBlocks>
        <!-- Add the XML code outlined in Step 2 if this section. -->
     </BuildingBlocks>
    
     <RelyingParty>
       ...
     </RelyingParty>
    </TrustFrameworkPolicy>
    
  2. 在此 BuildingBlocks 策略文件的部分中,添加以下代码。 请确保仅包含与组织相关的国家/地区代码:

     <BuildingBlocks>
    
       <ContentDefinitions>
         <ContentDefinition Id="api.phonefactor">
           <LoadUri>~/tenant/templates/AzureBlue/multifactor-1.0.0.cshtml</LoadUri>
           <DataUri>urn:com:microsoft:aad:b2c:elements:contract:multifactor:1.2.20</DataUri>
           <Metadata>
             <Item Key="TemplateId">azureBlue</Item>
           </Metadata>
           <LocalizedResourcesReferences MergeBehavior="Prepend">
             <!-- Add only primary business language here -->
             <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.phonefactor.en" />        
           </LocalizedResourcesReferences>
         </ContentDefinition>
       </ContentDefinitions>
    
       <Localization Enabled="true">
         <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
           <!-- Add only primary business language here -->
           <SupportedLanguage>en</SupportedLanguage>
         </SupportedLanguages>
    
         <!-- Phone factor for primary business language -->
         <LocalizedResources Id="api.phonefactor.en">
           <LocalizedStrings>
            <LocalizedString ElementType="UxElement" StringId="countryList">{"DEFAULT":"Country/Region","JP":"Japan","BG":"Bulgaria","US":"United States"}</LocalizedString>
           </LocalizedStrings>
         </LocalizedResources>
       </Localization>
    
      </BuildingBlocks>
    

    countryList 充当允许列表。 仅允许在此列表中指定的国家/地区(例如日本、保加利亚和美国)使用 MFA。 所有其他国家/地区都将被阻止。

重要

必须将此代码添加到信赖方策略,以确保在服务器端正确实施国家/地区代码限制。