0Pricing
Cloud & IT Cert Prep · 课时

应用服务身份验证和网络

为 Web 应用启用内置身份验证提供程序(Entra ID、Google、GitHub),并使用 VNet 集成和访问限制限制入站流量。

应用服务身份验证和网络 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

App Service 中的内置身份验证

Azure App Service 提供内置的身份验证和授权模块(有时称为 EasyAuth),无需更改应用程序代码即可处理登录流程、令牌验证和会话管理。您可以直接在 Azure 门户中启用该模块,并从多个身份提供商中进行选择。如果您希望快速为 API 或内部工具添加身份验证,而不想自行实现 OAuth 流程,这种方式非常适合。

支持的身份提供商

App Service 身份验证开箱即用地支持多个身份提供商:Microsoft Entra ID(用于企业或公司登录)、谷歌、脸书、推特/X、GitHub,以及任何兼容 OpenID Connect 的提供商。您需要在所选提供商处注册应用,以获取客户端 ID 和密钥,然后在 App Service 中配置这些信息。您可以同时启用多个提供商,让用户选择登录方式。

# Enable Microsoft Entra ID authentication via CLI
az webapp auth microsoft update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --client-id '<Entra-App-Client-ID>' \
  --client-secret '<Client-Secret>' \
  --issuer 'https://sts.windows.net/<TenantId>/'

# Set action when unauthenticated (redirect or 401)
az webapp auth update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --unauthenticated-client-action RedirectToLoginPage

令牌存储和访问用户声明

启用身份验证后,App Service 会将已验证的令牌存储在令牌存储中——这是针对每个用户会话的持久化存储。您的应用程序代码可以通过 EasyAuth 模块注入的特殊 HTTP 请求标头访问已验证用户的声明:X-MS-CLIENT-PRINCIPAL-NAME(电子邮件/UPN)、X-MS-CLIENT-PRINCIPAL-ID(对象 ID),以及用于获取原始访问令牌的 X-MS-TOKEN-AAD-ACCESS-TOKEN。

// Node.js: read user identity from EasyAuth headers
app.get('/profile', (req, res) => {
  const userName = req.headers['x-ms-client-principal-name'];
  const userId = req.headers['x-ms-client-principal-id'];
  res.json({ name: userName, id: userId });
});

// Or decode the full claims JSON from the header
const principalHeader = req.headers['x-ms-client-principal'];
const claims = JSON.parse(Buffer.from(principalHeader, 'base64').toString());

用于出站流量的 VNet Integration

VNet Integration 允许 App Service 应用向 Azure 虚拟网络内部的资源发起出站调用,例如虚拟机、SQL 数据库和内部 API,而无需将这些资源暴露到公共互联网。应用会在 VNet 的委派子网中获得一个虚拟 NIC,并可以访问 VNet 能够访问的任何资源,包括通过 VPN 或 ExpressRoute 连接的本地资源。Standard 层及更高层级提供 VNet Integration。

# Enable VNet Integration
az webapp vnet-integration add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --vnet MyVNet \
  --subnet AppServiceSubnet

# Route ALL traffic through the VNet (including internet)
az webapp config appsettings set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --settings WEBSITE_VNET_ROUTE_ALL=1

用于入站流量的专用终结点

VNet Integration 处理出站流量,而专用终结点处理入站流量——它使您的 App Service 只能通过专用 IP 地址从 VNet 内部访问。当专用终结点是唯一的访问方式时,对 azurewebsites.net 的外部互联网访问会被阻止。这适用于内部 API 和管理门户,可确保它们永远不会暴露到公共互联网。

# Create a private endpoint for the web app
az network private-endpoint create \
  --name MyWebAppPE \
  --resource-group MyRG \
  --vnet-name MyVNet \
  --subnet PrivateEndpointSubnet \
  --private-connection-resource-id \
    '/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
  --group-id sites \
  --connection-name MyWebAppConnection

访问限制

App Service 中的访问限制允许您为入站流量定义 IP 允许或拒绝列表。规则按优先级顺序进行评估(数字越小,优先级越高)。您可以将访问限制到特定 IP 范围(例如办公室 VPN 的出口 IP)、Azure 服务标记(例如 AzureLoadBalancer)或特定 VNet 子网。您可以使用访问限制来锁定暂存槽,使其只能由团队的 IP 范围访问。

# Allow only a specific IP range
az webapp config access-restriction add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --priority 100 \
  --action Allow \
  --ip-address 203.0.113.0/24 \
  --rule-name 'OfficeRange'

# Allow Azure Front Door service tag
az webapp config access-restriction add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --priority 200 \
  --action Allow \
  --service-tag AzureFrontDoor.Backend \
  --rule-name 'FrontDoor'

Hybrid Connections

Hybrid Connections(来自 BizTalk)允许 App Service 访问本地资源,而不需要 VNet Integration 或 VPN 网关。本地安装的轻量级中继代理会与 Azure Service Bus 建立出站连接,您的应用则通过该中继进行连接。Hybrid Connections 在 TCP 层运行并支持任何端口,适合连接无法迁移到 Azure 的旧版本地数据库或 API。

# Add a Hybrid Connection to reach on-prem SQL
az webapp hybrid-connection add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --namespace myServiceBusNS \
  --hybrid-connection on-prem-sql-relay

# The Hybrid Connection Manager agent must be installed
# and configured on the on-premises server to complete the relay

App Service 的托管标识

为您的 App Service 应用分配托管标识,使其能够向其他 Azure 服务(Key Vault、Blob Storage、SQL Database)进行身份验证,而无需在任何位置存储凭据。Azure 会自动管理该标识的凭据。您可以使用系统分配的标识(与应用生命周期绑定)或用户分配的标识(可由多个应用共享)。为该标识授予目标资源上的 RBAC 角色。

# Enable system-assigned managed identity
az webapp identity assign \
  --name MyUniqueWebApp \
  --resource-group MyRG

# Grant the identity access to Key Vault secrets
az keyvault set-policy \
  --name MyKeyVault \
  --object-id $(az webapp identity show \
      --name MyUniqueWebApp \
      --resource-group MyRG \
      --query principalId -o tsv) \
  --secret-permissions get list

启用 CORS

跨源资源共享(CORS)控制哪些域名可以通过浏览器向您的 App Service 应用发起 API 调用。在 CORS 设置中配置允许的源——对于需要身份验证的 API,生产环境中不要返回通配符(*)。App Service 内置的 CORS 支持会自动添加 Access-Control-Allow-Origin 响应标头,因此在简单场景下,您的应用程序代码无需使用 CORS 中间件。

# Allow specific origin
az webapp cors add \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --allowed-origins https://www.contoso.com

# View current CORS settings
az webapp cors show \
  --name MyUniqueWebApp \
  --resource-group MyRG

# Remove a CORS origin
az webapp cors remove \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --allowed-origins https://old.contoso.com

App Service 环境(ASE)

App Service 环境(ASE)是 App Service 的完全隔离专用部署,运行在您自己的 VNet 内。它提供最高级别的网络隔离能力、可扩展性(最多 200 个实例)和合规性支持。ASE v3 不再需要专用公共 IP,并原生支持专用终结点。其代价是成本显著更高——ASE 适用于具有严格隔离要求的企业工作负载。

安全最佳实践总结

要安全地部署 App Service,请执行以下操作:强制仅使用 HTTPS;使用访问限制限制入站 IP;启用托管标识,避免在配置中保存机密;将机密存储在带有 Key Vault 引用的 Key Vault 中;应用最低 TLS 版本 1.2;启用 Defender for App Service 进行威胁检测;并定期查看应用资源的Azure Security Center 建议。

# Enforce HTTPS and minimum TLS version
az webapp update \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --https-only true

az webapp config set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --min-tls-version '1.2' \
  --ftps-state Disabled

快速检查

测试您对本课 Microsoft Azure 基础知识(AZ-900)概念的理解。

课程回顾

在本课中,您学习了以下内容:内置身份验证(EasyAuth)无需更改代码即可添加身份提供商登录;VNet Integration会通过您的虚拟网络路由出站流量,而专用终结点则会锁定入站流量;托管标识可实现向其他 Azure 服务进行无密码身份验证。接下来,我们将学习 Azure Container Registry。

常见问题解答

「应用服务身份验证和网络」课时是免费的吗?

是的 — 「应用服务身份验证和网络」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「应用服务身份验证和网络」这节课中我会学到什么?

为 Web 应用启用内置身份验证提供程序(Entra ID、Google、GitHub),并使用 VNet 集成和访问限制限制入站流量。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「应用服务身份验证和网络」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 创建应用服务计划和 Web 应用
  2. 部署槽位和交换
  3. 自动缩放和自定义域
  4. 应用服务身份验证和网络
← 返回 Cloud & IT Cert Prep