Compartir a través de

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

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

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

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

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

  1. 登录到 Azure 门户 并转到应用。

  2. 在左窗格中选择 “安全>身份验证 ”。 选择“添加标识提供者”。

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

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

  4. “客户端机密过期 ”列表中,选择到期日期。

  5. 如果要为此应用程序配置第一个标识提供者,则会看到 “容器应用身份验证设置” 部分。 否则,请转到下一步。

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

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

  7. 选择 添加

现在,你可以在应用中使用 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.cn/.auth/login/aad/callback

    3. 选择“注册”。

    4. 在左窗格中的“管理”下,选择“身份验证”(预览版)。

    5. “设置” 选项卡上,选择 ID 令牌(用于隐式和混合流), 以允许来自容器应用的 OpenID Connect 用户登录。 选择“保存”

  5. 转到新的应用注册。

    1. “概述 ”窗格中,复制 应用程序(客户端)ID目录(租户)ID 供以后使用。
    2. (可选)如果尚未将重定向 URI 添加到应用注册,现在可以添加。
      1. 在左窗格中的“管理”下,选择“身份验证”(预览版)。

      2. “身份验证”(预览) 窗格中,选择“ 添加重定向 URI”。

      3. “选择要添加重定向 URI 的平台”窗格中,选择 “Web”。

      4. “添加重定向 URI ”窗格中的 “重定向 URI ”框中,输入以下内容。 将 \<APP_URL\> 替换为您之前记录的应用程序 URL。

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

        例如:https://<CONTAINER_APP_NAME>.<HOSTNAME>.<LOCATION>.azurecontainerapps.cn/.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 接受的格式,请参阅 Microsoft Entra ID 中应用程序属性的安全最佳做法

        将自动保存该值。

      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< 替换为>云环境的身份验证终结点(例如,“https://login.chinacloudapi.cn"适用于全球 Azure)。 将 <TENANT-ID> 替换为应用注册所在的目录(租户)ID。 此值用于将用户重定向到正确的Microsoft Entra 租户,并下载元数据以确定相应的令牌签名密钥和令牌颁发者声明值,例如。 对于使用 Azure Active Directory v1 的应用程序,请在 URL 中省略 /v2.0
    允许的令牌目标用户 配置的应用程序(客户端)ID 始终被隐式视为允许的受众。 如果此值引用云应用或服务器应用,并且你想要接受来自客户端容器应用的身份验证令牌(可以在 X-MS-TOKEN-AAD-ID-TOKEN 标头中检索身份验证令牌),请在此处添加客户端应用的应用程序(客户端)ID。

    客户端密码以 机密 的形式存储在容器应用中。

  5. 如果这是为应用程序配置的第一个标识提供者,则会看到 “容器应用身份验证设置” 部分。 否则,进行下一步。

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

  6. 选择 添加

现在,你可以在应用中使用 Microsoft 标识平台进行身份验证了。 提供程序列在 “身份验证” 窗格中。 在此处,你可以编辑或删除此供应商配置。

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

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

本机客户端应用程序

您可以注册原生客户端代表登录用户请求访问您的容器应用程序的 API。

  1. Azure 门户中,搜索并选择“Microsoft Entra ID”

  2. “概述 ”窗格中,选择“ 添加>应用注册”。

  3. “注册应用程序 ”窗格中,输入应用注册 的名称

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

    注意事项

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

  5. 选择“注册”。

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

  7. 在左侧窗格中的“管理”下,选择“API 权限” 。 选择 添加权限>我的 API

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

  9. 在“委托的权限”下,选择“user_impersonation”,然后选择“添加权限”。

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

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

  1. Azure 门户中,搜索并选择“Microsoft Entra ID”
  2. “概述”窗格中,选择“ 添加>应用注册”。
  3. “注册应用程序 ”窗格中,输入守护程序应用注册 的名称
  4. 对于守护程序应用程序,不需要 重定向 URI,因此可以将该字段留空。
  5. 选择“注册”。
  6. 创建应用注册后,复制 应用程序(客户端)ID 值。
  7. 在左窗格中的 “管理”下,选择“ 证书 & 机密”。
  8. “证书和机密 ”窗格中,选择“ 新建客户端密码”。
  9. “添加客户端机密”窗格中选择“添加”。 复制页面上显示的客户端机密值。 它不会再次显示。

现在,可以通过将参数设置为目标应用resource使用客户端 ID 和客户端密码来请求访问令牌。 然后,可以使用标准 OAuth 2.0 授权标头向目标应用显示生成的访问令牌。 容器应用身份验证/授权会像往常一样验证并使用令牌来指示调用方(在本例中不是用户的应用程序)已经过身份验证。

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

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

处理经过身份验证的用户

有关使用经过身份验证的用户的详细信息,请参阅以下资源。

后续步骤