Skip to content
返回云服务

Microsoft Entra ID (Azure AD)

微软云身份提供者:SSO、OAuth2/OIDC、B2B/B2C、条件访问、PIM 即时角色和应用注册用于 RBAC。

Azure高级

为什么

Entra ID 是 Azure 和 Microsoft 365 的身份骨干 —— 每个 Azure 资源信任其 RBAC,并通过 Connect 与本地 AD 联合。提供条件访问(阻止旧认证、按位置要求 MFA)、PIM 即时特权访问和应用注册用于自有 SaaS 应用的 OIDC 登录。Azure holds 21% cloud market share (Synergy Research Q4 2024)。

Azure 是拥有 Microsoft 365 / Active Directory 资产的企业的默认选择 — 95% 的财富 500 强使用 Azure。AKS 和 Cosmos DB 对 .NET 工作负载是一等公民。

何时使用

任何 Azure RBAC、Microsoft 365 SSO 或需 OIDC 登录的自定义应用都应使用 Entra ID。面向消费者且需社交登录(Google、Facebook)的应用用 B2C。

Azure 中服务间认证用托管标识(基于 Entra ID)无需存密钥。优先于自建 JWT 签发者。

如何做

1. 为应用创建应用注册;获取客户端 ID 和租户 ID。 2. 添加客户端密钥或(更好)为 GitHub Actions 添加联合凭据。 3. 配置 OIDC 登录的重定向 URI。 4. 在清单中定义应用角色用于 RBAC;将角色分配给用户/组。 5. 用 MSAL(@azure/msal-node)获取令牌。 6. 通过验证 JWT 受众和签发者保护 API。 ```bash az ad app create --display-name "myapp" --identifier-uris "https://myapp" az ad sp create --id \${APP_ID} az role assignment create --role "Reader" --assignee \${SP_ID} --scope /subscriptions/.../resourceGroups/rg ```

示例

Node.js API 用 passport 验证 Entra ID JWT 并强制应用角色: ```ts import passport from "passport"; import { BearerStrategy } from "passport-azure-ad"; passport.use(new BearerStrategy({ identityMetadata: "https://login.microsoftonline.com/contoso.onmicrosoft.com/v2.0/.well-known/openid-configuration", clientID: process.env.AAD_CLIENT_ID!, audience: process.env.AAD_AUDIENCE!, }, (token, done) => { if (!token.roles?.includes("Admin")) return done(null, false); return done(null, token, token); })); app.get("/admin", passport.authenticate("oauth-bearer", { session: false }), (req, res) => res.json({ ok: true })); ```

常见问题

  • ⚠401 invalid_token 受众不匹配 —— API 的受众配置必须与令牌的 aud 声明匹配;单租户 API 用客户端 ID URI 作为受众。
  • ⚠令牌中无应用角色 —— 角色仅通过应用角色分配分配给用户时签发;基于组的角色需 'group claims' 可选声明和代码中组到角色的映射。
  • ⚠客户端密钥过期 —— 应用注册的密钥过期(最长 24 个月);GitHub Actions 用联合身份凭据(工作负载身份联合)可完全避免密钥。

最佳实践

  • ✓Azure 服务间认证用托管标识 —— 无需轮换密钥,标识与资源生命周期绑定。
  • ✓启用条件访问策略(要求 MFA、阻止旧认证、按位置限制)而非仅依赖密码。
  • ✓Owner/Contributor 角色用 PIM(特权身份管理)使特权访问即时且可审计,而非常驻。

常见问题解答

什么是Microsoft Entra ID (Azure AD)?它解决什么问题?

微软云身份提供者:SSO、OAuth2/OIDC、B2B/B2C、条件访问、PIM 即时角色和应用注册用于 RBAC。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Microsoft Entra ID (Azure AD)?

两步即可跑通:① 为应用创建应用注册;获取客户端 ID 和租户 ID。;② 添加客户端密钥或(更好)为 GitHub Actions 添加联合凭据。。建议先用免费套餐验证流程,再接入生产环境。

Microsoft Entra ID (Azure AD) 最容易踩的坑是什么?

最高频的问题是:401 invalid_token 受众不匹配 —— API 的受众配置必须与令牌的 aud 声明匹配;单租户 API 用客户端 ID URI 作为受众。。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Microsoft Entra ID (Azure AD) 的最佳实践有哪些?

Microsoft Entra ID (Azure AD) 的最佳实践包括:Azure 服务间认证用托管标识 —— 无需轮换密钥,标识与资源生命周期绑定。;启用条件访问策略(要求 MFA、阻止旧认证、按位置限制)而非仅依赖密码。;Owner/Contributor 角色用 PIM(特权身份管理)使特权访问即时且可审计,而非常驻。。其中首条「Azure 服务间认证用托管标识 —— 无需轮换密钥,标识与资源生命周期绑定。」应作为团队默认规范写入 IaC 模板。

Microsoft Entra ID (Azure AD) 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Microsoft Entra ID (Azure AD) 多数提供免费套餐,先在免费额度内验证再放量。