快速入门:使用 Microsoft Entra ID 对 Durable Functions 应用进行身份验证

Microsoft Entra ID 是基于云的标识和访问管理服务。 基于标识的连接允许 Durable Functions(Azure Functions 的一项功能)对受 Microsoft Entra 保护的资源(如 Azure 存储帐户)发出经授权的请求,无需用户手动管理机密。 Durable Functions 使用默认的 Azure 存储提供程序时,它必须针对 Azure 存储帐户进行身份验证。

在本快速入门中,你将完成相关步骤来设置 Durable Functions 应用,以使用两种不同类型的基于标识的连接:

  • 托管标识凭据(推荐)
  • 客户端密码凭据

如果你没有 Azure 帐户,请在开始之前创建一个试用帐户。

先决条件

若要完成本快速入门,你需要:

  • 在 Azure 门户中创建了现有 Durable Functions 项目或 Azure 中部署了本地 Durable Functions 项目。
  • 熟悉如何在 Azure 中运行 Durable Functions 应用。

如果没有已在 Azure 中部署的现有 Durable Functions 项目,建议从以下快速入门之一开始:

将应用配置为使用托管标识凭据

应用可以使用托管标识轻松访问其他受 Microsoft Entra 保护的资源(如 Azure Key Vault 的实例)。 Durable Functions 扩展版本 2.7.0 及更高版本中支持托管标识访问。

注意

托管标识仅当应用在 Azure 中执行时才可用。 将应用配置为使用基于标识的连接时,本地执行的应用使用开发人员凭据通过 Azure 资源进行身份验证。 然后,在 Azure 中部署应用时,它使用你的托管标识配置。

启用托管标识

首先,为应用程序启用托管标识。 函数应用必须具有系统分配的托管标识或用户分配的托管标识。 若要为函数应用启用托管标识,并详细了解两种类型的标识之间的差异,请参阅托管标识概述

将访问角色分配给托管标识

接下来,在 Azure 门户中,将三个基于角色的访问控制 (RBAC) 角色分配给托管标识资源:

  • 存储队列数据参与者
  • 存储 Blob 数据参与者
  • 存储表数据参与者

配置托管标识

在使用应用的托管标识之前,请对应用配置进行一些更改:

  1. 在 Azure 门户中,在“设置”下的函数应用资源菜单上,选择“配置”

  2. 在设置列表中,选择“AzureWebJobsStorage”并选择“删除”图标

    显示默认存储设置和删除 AzureWebJobsStorage 的屏幕截图。

  3. 添加一个设置,用于将 Azure 存储帐户链接到应用程序。

    根据用于应用运行时采用的云,使用以下方法之一

    • Azure 云:如果应用在公共 Azure 中运行,请添加用于标识 Azure 存储帐户名称的设置

      • AzureWebJobsStorage__<accountName>

        示例: AzureWebJobsStorage__mystorageaccount123

      可以在“终结点”选项卡上的存储帐户信息中获取这些 URI 变量的值

      显示终结点作为特定服务 URI 的示例的屏幕截图。

  4. 完成托管标识配置:

    • 如果使用“系统分配的标识”,则不会进行任何其他更改

    • 如果使用“用户分配的标识”,请将以下设置添加到应用配置

      • 对于 AzureWebJobsStorage__credential,请输入“managedidentity”

      • 对于 AzureWebJobsStorage__clientId,请从 Microsoft Entra 管理中心获取此 GUID 值

      显示用户标识客户端 ID 的屏幕截图。

将应用配置为使用客户端机密凭据

在 Microsoft Entra ID 中注册客户端应用程序是为 Durable Functions 应用配置对 Azure 服务的访问权限的另一种方式。 在以下步骤中,使用客户端密码凭据对 Azure 存储帐户进行身份验证。 函数应用可以在本地和 Azure 中使用此方法。 比起使用托管标识凭据,使用客户端密码凭据更不推荐,因为设置和管理客户端密码更加复杂。 客户端密码凭据还需要与 Azure Functions 服务共享机密凭据。

使用 Microsoft Entra ID 注册客户端应用程序

  1. 在 Azure 门户中,使用 Microsoft Entra ID 注册客户端应用程序

  2. 为应用程序创建客户端密码。 在已注册的应用程序中,完成以下步骤:

    1. 选择“证书和密码”>“新建客户端密码”

    2. 对于“说明”,请输入独特的说明

    3. 对于“过期”,请输入机密的有效时间,此时间之后将过期

    4. 复制机密值供稍后使用

      离开窗格后,机密的值不会再次显示,因此请确保复制机密并将其保存

    显示“添加客户端密码”窗格的屏幕截图。

将访问角色分配给应用程序

接下来,将三个 RBAC 角色分配给客户端应用程序:

  • 存储队列数据参与者
  • 存储 Blob 数据参与者
  • 存储表数据参与者

添加角色:

  1. 在 Azure 门户中,转到函数的存储帐户。

  2. 在资源菜单上,选择“访问控制(IAM)”,然后选择“添加角色分配”

    显示“访问控制”窗格的屏幕截图,其中突出显示了“添加角色分配”。

  3. 选择要添加的角色,选择“下一步”,然后搜索你的应用程序。 查看角色分配,然后添加该角色。

    显示“角色分配”窗格的屏幕截图。

配置客户端密码

在 Azure 门户中,运行并测试应用程序。 若要在本地运行和测试应用,请在函数的 local.settings.json 文件中指定以下设置

  1. 在 Azure 门户中,在“设置”下的函数应用资源菜单上,选择“配置”

  2. 在设置列表中,选择“AzureWebJobsStorage”并选择“删除”图标

  3. 添加一个设置,用于将 Azure 存储帐户链接到应用程序。

    根据运行应用的云使用以下方法

    • AzureWebJobsStorage__<accountName>

      示例: AzureWebJobsStorage__mystorageaccount123

    可以在“终结点”选项卡上的存储帐户信息中获取这些 URI 变量的值

    显示终结点作为特定服务 URI 的示例的屏幕截图。

  4. 若要添加客户端密码凭据,请设置以下值:

    • AzureWebJobsStorage__clientId:在 Microsoft Entra 应用程序窗格中获取此 GUID 值

    • AzureWebJobsStorage__ClientSecret:你在前面的步骤中在 Microsoft Entra 管理中心生成的机密值。

    • AzureWebJobsStorage__tenantId:Microsoft Entra 应用程序注册时采用的租户 ID。 在 Microsoft Entra 应用程序窗格中获取此 GUID 值。

    客户端 ID 和租户 ID 使用的值显示在客户端应用程序“概述”窗格上。 客户端密码值是在前面的步骤中保存的值。 刷新窗格后,客户端密码的值不可用。

    显示 Microsoft Entra 应用程序窗格上的租户 ID 和客户端 ID 的屏幕截图。