在 Azure 容器应用中启用通过 Microsoft Entra ID 进行身份验证和授权

本文介绍如何为 Azure 容器应用配置身份验证,以便应用使用 Microsoft 标识平台作为身份验证提供程序允许用户登录。

容器应用身份验证功能可以通过 Microsoft 标识平台自动创建应用注册。 你还可以使用你或目录管理员单独创建的注册。

选项 1:自动创建新的应用注册

此选项旨在使身份验证的启用变得简单,只需执行几下步骤即可。

  1. 登录 Azure 门户并导航到你的应用程序。

  2. 在左侧菜单中选择“身份验证”。 选择“添加标识提供者”。

  3. 在“标识提供者”下拉列表中选择“Microsoft”。 默认会选中用于创建新注册的选项。 你可以更改注册名称或支持的帐户类型。

    创建客户端机密并将其作为机密存储在容器应用中。

  4. 如果你要为此应用程序配置第一个标识提供者,系统将会通过“容器应用身份验证设置”部分显示提示。 如果不配置,请转到下一步。

    这些选项可确定应用程序如何响应未经身份验证的请求,默认选择会将所有请求重定向到用此新提供程序登录。 你现在可以自定义此行为,也可以稍后通过选择“身份验证”设置旁边的“编辑”,在主要“身份验证”屏幕上调整这些设置。 若要详细了解这些选项,请参阅身份验证流

  5. (可选)选择“下一步: 权限”并添加应用程序所需的任何范围。 这些将被添加到应用注册中,但你也可以稍后更改它们。

  6. 选择 添加

现在,你可以在应用中使用 Microsoft 标识平台进行身份验证了。 该提供程序将在“身份验证”屏幕上列出。 在该屏幕上,你可以编辑或删除此提供程序配置。

选项 2:使用单独创建的现有注册

你也可以为 Microsoft 标识平台手动注册应用程序,并通过注册详细信息自定义注册和配置容器应用身份验证。 如果想要从定义应用程序以外的其他 Microsoft Entra 租户使用应用注册,则此方法非常有用。

在 Microsoft Entra ID 中为容器应用创建应用注册

首先,创建应用注册。 执行此操作时,请收集以下信息,稍后在容器应用中配置身份验证时需要用到这些信息:

  • 客户端 ID
  • 租户 ID
  • 客户端机密(可选)
  • 应用程序 ID URI

若要注册应用,请执行以下步骤:

  1. 登录到 Azure 门户,搜索并选择“容器应用”,然后选择你的应用。 记下应用的 URL。 稍后要使用它们来配置 Microsoft Entra 应用注册。

  2. 在门户菜单中选择“Microsoft Entra ID”,然后转到“应用注册”选项卡并选择“新建注册”

  3. 在“注册应用”页上的“名称”中,输入应用注册的名称。

  4. 在“重定向 URI”中,选择“Web”并键入 <app-url>/.auth/login/aad/callback。 例如 https://<hostname>.azurecontainerapps.dev/.auth/login/aad/callback

  5. 选择“注册”。

  6. 在应用注册创建后,复制“应用(客户端) ID”和“目录(租户) ID”,以供稍后使用。

  7. 选择“身份验证”。 在“隐式授权和混合流”下,启用“ID 令牌”,以允许 OpenID Connect 用户从容器应用登录。 选择“保存”。

  8. (可选)选择“品牌”。 在“主页 URL”中,输入容器应用的 URL,然后选择“保存”。

  9. 选择“公开 API”,然后选择“应用程序 ID URI”旁边的“设置”。 此 ID 值在应用程序用作资源时是该应用程序的唯一标识,从而可以请求令牌以授予访问权限。 该值还用作创建的范围的前缀。

    对于单租户应用,可以使用默认值,其格式为 api://<application-client-id>。 还可以根据租户的一个已验证域指定更具可读性的 URI,例如 https://contoso.com/api。 对于多租户应用,必须提供自定义 URI。 要详细了解可接受的应用 ID URI 格式,请参阅应用注册最佳做法参考

    将自动保存该值。

  10. 选择“添加范围”。

    1. 在“添加范围”中,“应用程序 ID URI”是在上一步中设置的值。 选择“保存并继续”。
    2. 在“范围名称”中输入 user_impersonation
    3. 在文本框中,输入许可范围名称,以及希望在许可页上向用户显示的说明。 例如,输入“访问 <应用程序名>”。
    4. 选择“添加作用域”。
  11. (可选)若要创建客户端密码,请依次选择“证书和密码”>“客户端密码”>“新客户端密码”。 输入说明和过期时间,然后选择“添加”。 复制页面上显示的客户端机密值,因为网站不会再次显示该值。

  12. (可选)若要添加多个回复 URL,请选择“身份验证”。

在容器应用中启用 Microsoft Entra ID

  1. 登录 Azure 门户并导航到你的应用程序。

  2. 在左侧菜单中选择“身份验证”。 选择“添加标识提供者”。

  3. 在“标识提供者”下拉列表中选择“Microsoft”。

  4. 对于“应用注册类型”,可以选择“选取此目录中的现有应用注册”,这将自动收集必要的应用信息。 如果你的注册来自其他租户,或者你没有查看注册对象的权限,请选择“提供现有应用注册的详细信息”。 对于此选项,需要填写以下配置详细信息:

    字段 说明
    应用程序(客户端)ID 使用应用注册的应用(客户端)ID。
    客户端机密 使用在应用注册中生成的客户端机密。 使用客户端密码,将使用混合流,并且应用将返回访问令牌和刷新令牌。 如果未设置客户端机密,则使用隐式流并仅返回 ID 令牌。 这些令牌由提供程序发送并存储在 EasyAuth 令牌存储中。
    颁发者 URL 使用 <authentication-endpoint>/<TENANT-ID>/v2.0,并将 <authentication-endpoint> 替换为云环境的身份验证终结点(例如,全球 Azure 的“https://login.chinacloudapi.cn"”),同时将 <TENANT-ID> 替换为在其中创建应用注册的“目录(租户) ID”。 例如,此值用于将用户重定向到正确的 Microsoft Entra 租户,以及下载适当的元数据,以便确定相应的令牌签名密钥和令牌颁发者声明值。 对于使用 Azure AD v1 的应用程序,请省略 URL 中的 /v2.0
    允许的令牌受众 配置的应用程序(客户端)ID 始终被隐式视为允许的受众。 如果此值引用云应用或服务器应用,并且你想要接受来自客户端容器应用的身份验证令牌(可以在 X-MS-TOKEN-AAD-ID-TOKEN 标头中检索身份验证令牌),请在此处添加客户端应用的应用程序(客户端)ID。

    客户端密码将作为机密存储在容器应用中。

  5. 如果这是为应用程序配置的第一个标识提供者,则系统还会通过“容器应用身份验证设置”部分显示提示。 如果不配置,请转到下一步。

    这些选项可确定应用程序如何响应未经身份验证的请求,默认选择会将所有请求重定向到用此新提供程序登录。 你现在可以更改自定义此行为,也可以稍后通过选择“身份验证”设置旁边的“编辑”,在主要“身份验证”屏幕上调整这些设置。 若要详细了解这些选项,请参阅身份验证流

  6. 选择 添加

现在,你可以在应用中使用 Microsoft 标识平台进行身份验证了。 该提供程序将在“身份验证”屏幕上列出。 在该屏幕上,你可以编辑或删除此提供程序配置。

配置客户端应用以访问容器应用

在上一部分,你已注册容器应用以便对用户进行身份验证。 在本部分中,将注册本机客户端或守护程序应用。 然后,它们可以代表用户或自己请求访问容器应用公开的 API。 如果你只想要对用户进行身份验证,则不需要完成本部分所述的步骤。

本机客户端应用程序

可以注册本机客户端,以代表已登录用户请求访问容器应用的 API。

  1. Azure 门户中,选择“Microsoft Entra ID”>“添加”>“应用注册”。

  2. 在“注册应用”页上的“名称”中,输入应用注册的名称。

  3. 在“重定向 URI”中,选择“公共客户端(移动和桌面)”,然后键入 URL“<app-url>/.auth/login/aad/callback”。 例如 https://<hostname>.azurecontainerapps.dev/.auth/login/aad/callback

    注意

    对于Microsoft Store 应用程序,请改用包 SID 作为 URI。

  4. 选择“创建” 。

  5. 创建应用注册后,复制“应用程序(客户端) ID”的值。

  6. 选择“API 权限”>“添加权限”>“我的 API”。

  7. 选择先前为容器应用创建的应用注册。 如果未看到该应用注册,请确保在“在 Microsoft Entra ID 中为容器应用创建应用注册”部分已添加 user_impersonation 作用域 。

  8. 在“委托的权限”下,依次选择“user_impersonation”和“添加权限”。

在本部分中,你配置了一个本机客户端应用程序,该应用程序可以代表用户请求访问容器应用。

守护程序客户端应用程序(服务到服务的调用)

应用程序可以获取令牌,代表自身(不代表用户)调用容器应用中托管的 Web API。 此方案适用于在没有登录用户的情况下执行任务的非交互式后台程序应用程序。 它使用标准 OAuth 2.0 客户端凭据授权。

  1. Azure 门户中,选择“Microsoft Entra ID”>“添加”>“应用注册”。
  2. 在“注册应用程序”页上的“名称”中,输入后台程序应用注册的名称。
  3. 对于后台应用程序,不需要“重定向 URI”,因此可将其保留为空。
  4. 选择“创建”。
  5. 创建应用注册后,复制“应用程序(客户端) ID”的值。
  6. 选择“证书和机密”>“新建客户端机密”>“添加”。 复制页面中显示的客户端机密值。 它不会再次显示。

现在可以通过将 resource 参数设置为目标应用的“应用程序 ID URI”,使用客户端 ID 和客户端机密请求访问令牌。 然后,可以使用标准 OAuth 2.0 授权标头将生成的访问令牌提供给目标应用,容器应用身份验证/授权将像平常一样验证和使用该令牌,以指示调用方(在本例中是应用程序,不是用户)已进行身份验证。

此过程允许 Microsoft Entra 租户中的任何客户端应用程序请求访问令牌,并向目标应用进行身份验证。 如果你还想要强制实施授权以便只允许某些客户端应用程序,则必须调整配置。

  1. 在表示要保护的容器应用的应用注册清单中定义应用角色
  2. 在表示需要获得授权的客户端的应用注册上,选择“API 权限”>“添加权限”>“我的 API”。
  3. 选择之前创建的应用注册。 如果看不到应用注册,请确保已添加应用角色
  4. 在“应用程序权限”下,选择之前创建的应用角色,然后选择“添加权限”。
  5. 确保选择“授予管理员同意”以授权客户端应用程序请求权限。
  6. 与前面的方案(添加任何角色之前)类似,现在可以为同一目标 resource 请求访问令牌,而访问令牌将包括一个 roles 声明,其中包含授权给客户端应用程序的应用角色。
  7. 在目标容器应用代码中,现在可以验证令牌中是否存在预期的角色。 容器应用身份验证层不会执行验证步骤。 有关详细信息,请参阅访问用户声明

在本部分中,你配置了一个守护程序客户端应用程序,该应用程序可以使用自己的标识访问容器应用。

处理经过身份验证的用户

请通过以下指南获取有关处理已经过身份验证的用户的详细信息。

后续步骤