本文介绍如何使用应用服务的内置身份验证功能(也称为“简易身份验证”)设置与 Azure 函数应用的索引器连接。 Azure 函数应用是用于托管自定义 Web API 的优秀解决方案,Azure AI 搜索服务可以使用该 API 来扩充索引器运行期间引入的内容,或者在搜索查询中使用自定义嵌入模型进行集成矢量化时矢量化内容。
可以使用搜索服务的系统分配标识或用户分配标识对 Azure 函数应用进行身份验证。 此方法要求设置 Microsoft Entra ID 应用程序注册,以用作 Azure 函数应用的身份验证提供程序,如本文所述。
先决条件
- 为搜索服务创建托管标识。
将 Microsoft Entra ID 应用程序配置为用作身份验证提供程序
若要将 Microsoft Entra ID 用作 Azure 函数应用的身份验证提供程序,必须创建应用程序注册。 要执行此操作,有两个选项 - 通过 Azure 函数应用本身自动创建一个,或使用已创建的现有应用程序。 若要详细了解这些步骤,请遵循 Azure 应用服务的文档。
无论采用哪种选项,请确保按照以下步骤配置应用注册,以确保它与 Azure AI 搜索兼容。
确保应用注册配置了应用程序 ID URI
应用注册应使用应用程序 ID URI 进行配置,然后可以通过 Azure 函数应用和 Azure AI 搜索将其用作令牌受众。 以格式 api://<applicationId>
配置它。 为此,可以导航到应用注册的“概览”部分并设置“应用程序 ID URI”字段。
设置身份验证支持的帐户类型
导航到应用注册的“身份验证”部分并配置“支持的帐户类型”,以便只有与应用注册相同的组织目录中的帐户才能使用它进行身份验证。
(可选)配置客户端密码
应用服务建议对身份验证提供程序应用程序使用客户端密码。 只要设置了委托权限,身份验证就仍然可以在没有客户端密码的情况下工作。 若要设置客户端密码,请导航到应用注册的“证书和机密”部分,并添加“新客户端密码”,如本文所述。
将范围添加到委托权限
导航到“公开 API”部分,将应用注册配置为具有委托管理员和用户权限的范围,以确保它与索引器的身份验证流兼容。
设置委托的权限范围后,你应该会在应用注册的“API 权限”部分中注意到,Microsoft.Graph 上的 User.Read API 已设置。
在 Azure 函数应用中配置 Microsoft Entra ID 身份验证提供程序
使用上述确切规范注册客户端应用程序后,可以按照应用服务指南设置 Azure 函数应用的 Microsoft Entra ID 身份验证。 导航到 Azure 函数应用的“身份验证”部分,设置身份验证详细信息。
确保将以下设置配置为确保 Azure AI 搜索能够成功向 Azure 函数应用进行身份验证。
配置身份验证设置
- 确保“应用服务身份验证”为“启用”
- 限制对 Azure 函数应用的访问以要求身份验证
- 对于未经身份验证的请求,首选 HTTP 401: 未授权
以下屏幕截图突出显示了示例 Azure 函数应用的这些特定设置。
添加 Microsoft Entra ID 身份验证提供程序
- 将 Microsoft Entra ID 添加为 Azure 函数应用的身份验证提供程序。
- 创建新的应用注册,或选择以前配置的应用注册。 确保根据本文档上一部分中的准则对其进行配置。
- 确保在“允许的令牌受众”部分中指定应用注册的应用程序 ID URI。 它的格式应为
api://<applicationId>
,与之前创建的应用注册的配置相匹配。 - 如果需要,可以配置其他检查,以专门限制对索引器的访问。
配置其他检查
- 通过选中“允许来自特定标识的请求”选项,并在标识部分中输入“对象(主体) ID”,确保将特定 Azure AI 搜索服务的标识的“对象(主体) ID”指定为“标识要求”。
- 在“客户端应用程序要求”下,选择“允许来自特定客户端应用程序的请求”选项。 你需要查找 Azure AI 搜索服务的标识的客户端 ID。 为此,请复制上一步骤中的对象(主体)ID,并在你的 Microsoft Entra ID 租户中查找。 应该有一个匹配的企业应用程序,其概览页列出了“应用程序 ID”,这是需要指定为客户端应用程序要求的 GUID。
注释
此步骤是 Azure 函数应用上最重要的配置,执行错误可能会导致索引器无法访问 Azure 函数应用。 确保正确执行标识的企业应用程序详细信息的查找,并在正确的位置指定“应用程序 ID”和“对象(主体) ID”。
- 对于“租户要求”,请选择与你的安全状况相符的任何选项。 有关更多详细信息,请查看 Azure 应用服务文档。
设置与 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)。