You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Bearer Token实现Asp.net Core API鉴权的概念困惑

跨租户场景下验证Teams Tab获取的Azure Bearer Token方案

核心结论

不需要手动验证令牌,ASP.NET Core的Azure AD认证组件支持多租户模式,无需硬编码单个客户的密钥或租户ID,会自动从微软公开的公钥端点获取密钥完成签名验证。

具体配置步骤

  1. 启用多租户认证
    在Program.cs中配置Azure AD认证时,将TenantId设为"common"(允许个人及工作/学校账户)或"organizations"(仅允许工作/学校账户),组件会自动适配不同租户的令牌验证逻辑:

    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "https://login.microsoftonline.com/common/v2.0";
            options.Audience = "<你的API应用ID>";
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                // 允许任意合法租户的颁发者,配合common类型的Authority使用
                ValidIssuers = null,
                ValidateIssuerSigningKey = true,
                // 自动从微软OpenID配置端点获取对应密钥,无需手动配置共享密钥
                IssuerSigningKeyResolver = (token, securityToken, kid, parameters) =>
                {
                    var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(
                        $"{options.Authority}/.well-known/openid-configuration",
                        new OpenIdConnectConfigurationRetriever());
                    var config = configManager.GetConfigurationAsync().Result;
                    return config.SigningKeys.Where(k => k.KeyId == kid);
                }
            };
        });
    
  2. 自动完成令牌验证
    配置生效后,组件会自动处理以下验证环节:

    • 令牌签名合法性验证(通过微软公开公钥端点获取对应密钥)
    • 令牌有效期检查
    • 受众(Audience)匹配(确保令牌是颁发给你的API的)
    • 颁发者(Issuer)合法性校验(确认来自微软Azure AD的合法租户)
  3. 提取用户信息
    令牌验证通过后,可直接从HttpContext.User中获取用户邮箱、姓名等声明信息:

    [Authorize]
    [ApiController]
    [Route("api/[controller]")]
    public class UserInfoController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetUserInfo()
        {
            var email = User.FindFirst(ClaimTypes.Email)?.Value;
            var name = User.FindFirst(ClaimTypes.Name)?.Value;
            return Ok(new { Email = email, Name = name });
        }
    }
    

关键补充

如果需要限制仅特定租户的请求访问API,可以在TokenValidationParameters中动态配置ValidIssuers,或者在认证通过后添加中间件检查租户ID,实现租户级别的访问控制。

内容的提问来源于stack exchange,提问作者xnetdude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:05:25