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

在 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 门户
  2. 搜索并选择“容器应用”,然后选择你的应用。 在“概述”页中,记下应用的“应用程序 URL”。 稍后要使用它们来配置 Microsoft Entra 应用注册。
  3. 选择“主页”以返回到门户主菜单。 搜索并选择 Microsoft Entra ID
  4. 在“概述”页中,选择“添加”,然后选择“应用注册”
    1. 在“注册应用”页上的“名称”中,输入应用注册的名称。

    2. 在“重定向 URI”中,选择“Web”并输入以下内容。 将 \<APP_URL\> 替换为你在前面记录的应用程序 URL。

      <APP_URL>/.auth/login/aad/callback

      例如:https://<CONTAINER_APP_NAME>.<ENVIRONMENT_UNIQUE_ID>.<REGION_NAME>.azurecontainerapps.io/.auth/login/aad/callback

    3. 在“隐式授权和混合流”中,启用“ID 令牌”,以允许 OpenID Connect 用户从容器应用登录

    4. 选择“注册”。

  5. 浏览到新的应用注册。
    1. 在“概述”页中,稍后复制应用程序(客户端)ID 和目录(租户)ID
    2. (可选)如果以前未将重定向 URI 添加到应用注册,现在可以执行此操作。
      1. 在“托管”中,选择“身份验证”

      2. 在“身份验证”页的“平台配置”中,选择“添加平台”

      3. 在“配置平台”中,选择“Web”

      4. 在“配置 Web”的“重定向 URI”中,输入以下内容。 将 \<APP_URL\> 替换为你在前面记录的应用程序 URL。

        <APP_URL>/.auth/login/aad/callback

        例如:https://<CONTAINER_APP_NAME>.<HOSTNAME>.<LOCATION>.azurecontainerapps.io/.auth/login/aad/callback

      5. 选择配置

    3. (可选)在“管理”中,选择“品牌和属性”。 在“主页 URL”中,输入容器应用的 URL,然后选择“保存”。
    4. 在“管理”中,选择“公开 API”
      1. 选择“应用程序 ID URI”旁边的“添加”

        “应用程序 ID URI”在应用程序用作资源时是该应用程序的唯一标识,从而允许请求的令牌授予访问权限。 该值还用作创建的范围的前缀。

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

        将自动保存该值。

      2. 选择“添加范围”。

      3. 在“添加范围”中,“应用程序 ID URI”是在上一步中设置的值。

      4. 选择“保存并继续”。

      5. 在“范围名称”中输入 user_impersonation

      6. 输入你希望管理员在同意页面上看到的管理员同意显示名称和管理员同意说明。 许可显示名称示例为 Access <application-name>

      7. 选择“添加作用域”

    5. 在“管理”中,选择“证书和机密”
      1. 在“证书和机密”页面中,选择“客户端机密”
      2. 选择“新建客户端机密”。
      3. 输入说明并选择机密过期的时间
      4. 选择 添加
      5. 复制页面上显示的客户端机密值,因为网站不会再次显示该值。

在容器应用中启用 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.microsoftonline.com"”),同时将 <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.io/.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. 在目标容器应用代码中,验证令牌中现在是否存在预期的角色。 容器应用身份验证层不会执行验证步骤。 有关详细信息,请参阅访问用户声明

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

处理经过身份验证的用户

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

后续步骤