Compartilhar via

使用“简易身份验证”向 Azure Function App 进行身份验证(Azure AI 搜索)

本文介绍如何使用 Azure 应用服务的内置身份验证功能(也称为“轻松身份验证”)设置与 Azure 函数应用的索引器连接。Azure Function 应用是托管自定义 Web API 的好解决方案,Azure AI 搜索服务可用于丰富索引器运行期间引入的内容,或者,如果使用自定义嵌入模型进行 集成矢量化,请在搜索查询中向量化内容。

可以使用搜索服务的系统分配或用户分配的托管标识对 Azure 函数应用进行身份验证。 此方法要求设置Microsoft Entra ID 应用程序注册,以用作 Azure Function 应用的身份验证提供程序,本文对此进行了说明。

先决条件

将 Microsoft Entra ID 应用程序配置为身份验证提供程序

若要将 Microsoft Entra ID 用作 Azure 函数应用的身份验证提供程序,必须创建应用程序注册。 有两个选项:通过 Azure 函数应用本身自动创建一个,或使用现有应用程序。 若要了解有关这些步骤的详细信息,请参阅 应用服务文档

无论哪种选项,请确保按照以下步骤配置应用注册,以确保它与 Azure AI 搜索兼容。

确保应用注册配置了应用程序 ID URI

应用注册应使用应用程序 ID URI 进行配置,该 URI 可用作 Azure 函数应用和 Azure AI 搜索的令牌受众。 以格式 api://<applicationId> 配置它。 为此,可以导航到应用注册的“概览”部分并设置“应用程序 ID URI”字段。

使用应用程序 ID URI 配置的应用注册的屏幕截图。

设置身份验证支持的帐户类型

导航到应用注册的“身份验证”部分并配置“支持的帐户类型”,以便只有与应用注册相同的组织目录中的帐户才能使用它进行身份验证。

配置了支持帐户类型的应用注册的屏幕截图。

(可选)配置客户端密码

应用服务建议对身份验证提供程序应用程序使用客户端密码。 只要设置了委托权限,身份验证就仍然可以在没有客户端密码的情况下工作。 若要设置客户端密码,请导航到应用注册的“证书和机密”部分,并添加“新客户端密码”,如本文所述。

应用注册的屏幕截图,其中包含用于配置客户端机密的选项。

将范围添加到委托权限

导航到“公开 API”部分,将应用注册配置为具有委托管理员和用户权限的范围,以确保它与索引器的身份验证流兼容。

委托权限范围的应用注册的屏幕截图。

设置委托的权限范围后,你应该会在应用注册的“API 权限”部分中注意到,Microsoft.Graph 上的 User.Read API 已设置。

具有委派权限的应用注册的屏幕截图。

在 Azure 函数应用中配置 Microsoft Entra ID 身份验证提供程序

客户端应用程序已按照以前的规范注册后,可以根据 应用服务文档 设置 Azure Function 应用的 Microsoft Entra ID 身份验证。 导航到 Azure 函数应用的“身份验证”部分,设置身份验证详细信息。

确保将以下设置配置为确保 Azure AI 搜索能够成功向 Azure 函数应用进行身份验证。

配置身份验证设置

  • 确保“应用服务身份验证”为“启用”
  • 限制对 Azure 函数应用的访问以要求身份验证
  • 对于未经身份验证的请求,首选 HTTP 401: 未授权

以下屏幕截图突出显示了示例 Azure 函数应用的这些特定设置。

已配置身份验证设置的 Azure 函数应用的屏幕截图。

添加 Microsoft Entra ID 身份验证提供程序

  • 将 Microsoft Entra ID 添加为 Azure 函数应用的身份验证提供程序。
  • 创建新的应用注册,或选择以前配置的应用注册。 确保根据本文档上一部分中的准则对其进行配置。
  • 确保在“允许的令牌受众”部分中指定应用注册的应用程序 ID URI。 它的格式应为 api://<applicationId>,与之前创建的应用注册的配置相匹配。
  • 如果需要,可以配置其他检查,以专门限制对索引器的访问。

包含 Microsoft Entra ID 身份验证提供程序的 Azure 函数应用的屏幕截图。

配置其他检查

  • 通过选中“允许来自特定标识的请求”选项,并在标识部分中输入“对象(主体) ID”,确保将特定 Azure AI 搜索服务的标识的“对象(主体) ID”指定为“标识要求”。

Azure AI 搜索服务的标识部分的屏幕截图。

  • 客户端应用程序要求中,选择“ 允许来自特定客户端应用程序的请求”选项。 你需要查找 Azure AI 搜索服务的标识的客户端 ID。 为此,请复制上一步骤中的对象(主体)ID,并在你的 Microsoft Entra ID 租户中查找。 应该有一个匹配的企业应用程序,其概览页列出了“应用程序 ID”,这是需要指定为客户端应用程序要求的 GUID。

Azure AI 搜索服务标识的企业应用程序详细信息的屏幕截图。

注释

此步骤是 Azure 函数应用上最重要的配置,执行错误可能会导致索引器无法访问 Azure 函数应用。 确保正确执行标识的企业应用程序详细信息的查找,并在正确的位置指定“应用程序 ID”和“对象(主体) ID”。

  • 对于“租户要求”,请选择与你的安全状况相符的任何选项。 有关详细信息,请参阅 应用服务文档

设置与 Azure 函数应用的连接

根据是否需要在自定义 Web API 技能或自定义 Web API 矢量器中建立与 Azure 函数应用的连接,JSON 定义略有不同。 在这两种情况下,请确保为 Azure 函数应用指定正确的 URI,并将 authResourceId 设置为与为身份验证提供程序配置的“允许的令牌受众”相同的值。

根据你选择使用系统分配的标识还是用户分配的标识进行连接,所需的属性略有不同。

使用系统分配的标识

下面是为示例 Azure 函数应用调用名为 test 的函数的示例,其中搜索服务的系统分配标识被允许通过“简易身份验证”进行身份验证。

"uri": "https://contoso-function-app.chinacloudsites.cn/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000"

使用用户分配的标识

下面是调用同一函数的示例,其中特定用户分配的标识被允许通过“简易身份验证”进行身份验证。 应指定在配置的 identity 属性中使用的确切用户分配标识的资源 ID。

"uri": "https://contoso-function-app.chinacloudsites.cn/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000",
"identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]" 
    }

注释

此用户分配的标识实际上应分配给 Azure AI 搜索服务,以便在自定义 Web 技能/矢量器定义中指定它。

运行索引器/矢量器以验证权限

对于自定义 Web API 技能,在索引器运行时验证权限。 对于矢量器,当使用自定义 Web API 矢量器发出矢量查询时,将对其进行验证。 若要排除身份验证的任何特定问题,可以进行测试,方法是在 Azure 函数应用上禁用身份验证提供程序并确保从索引器/矢量器发出的调用成功。

  • 如果身份验证问题仍然存在,请确保在 Azure 函数应用的身份验证提供程序中指定了 Azure AI 搜索服务的标识的正确标识信息(即应用程序 ID、对象(主体)ID)。