在 Azure 容器应用中实施身份验证和授权

已完成

Azure 容器应用提供内置的身份验证和授权功能,以使用极少量的代码或无需使用任何代码来保护启用了外部入口的容器应用。 容器应用的内置身份验证功能可以通过向联合标识提供者提供现成的身份验证来节省时间和精力,使你能够专注于应用程序的其余部分。

  • Azure 容器应用提供对各种内置身份验证提供程序的访问权限。
  • 内置身份验证功能不需要任何特定的语言、SDK、安全专业知识,甚至不需要编写的任何代码。

此功能只能与 HTTPS 结合使用。 确保 allowInsecure 已在容器应用的入口配置上禁用。 可以将容器应用配置为在进行身份验证时限制或不限制对网站内容和 API 的访问。

  • 若要仅将应用访问限制为经过身份验证的用户,请将其“限制访问”设置为“要求身份验证”。
  • 若要实施身份验证但不限制访问,请将其“限制访问”设置指定为“允许未经身份验证的访问”。

标识提供者

容器应用使用联合标识,其中第三方标识提供者为你管理用户标识和身份验证流。 默认提供以下标识提供者:

提供程序 登录终结点 操作说明指南
Microsoft 标识平台 /.auth/login/aad Microsoft标识平台
脸书 /.auth/login/facebook Facebook
GitHub /.auth/login/github GitHub
谷歌 /.auth/login/google 谷歌
X /.auth/login/twitter X
任何 OpenID Connect 提供程序 /.auth/login/<providerName> OpenID Connect

使用其中的某个提供者时,可以使用登录终结点从该提供者进行用户身份验证和身份验证令牌验证。 你可以向用户提供任意数量的这些提供程序选项。

功能体系结构

身份验证和授权中间件组件是平台的一项功能,可在应用程序中的每个副本上作为 sidecar 容器运行。 启用后,每个传入 HTTP 请求都会在应用程序处理安全层之前通过它。

示意图显示请求被挎斗容器拦截,该容器与标识提供者进行交互,然后再允许流量发往应用容器。

平台中间件为应用处理多项操作:

  • 使用指定的标识提供者对用户和客户端进行身份验证
  • 管理经过身份验证的会话
  • 将标识信息插入 HTTP 请求标头

身份验证和授权模块在独立于应用程序代码的单独容器中运行。 由于安全容器未在进程内运行,因此无法与特定语言框架直接集成。 但是,应用所需的相关信息将在请求头中提供。

身份验证流

身份验证流对于所有提供程序是相同的,但根据是否要使用提供程序的 SDK 登录而有所差别:

  • 不使用提供程序 SDK(服务器导向的流或服务器流):应用程序将联合登录委托给容器应用。 委派通常是浏览器应用的情况,它们会向用户呈现提供程序的登录页。

  • 使用提供程序 SDK(客户端导向的流或客户端流):应用程序手动将用户登录到提供程序,然后将身份验证令牌提交给容器应用进行验证。 对于不向用户呈现提供程序登录页的无浏览器应用,此方法很常见。 例如,使用提供程序的 SDK 登录用户的本机移动应用。