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

配置Microsoft登录的通配符域名以支持任意用户登录

Microsoft登录通配符子域名配置与应用信息优化方案

通配符子域名身份验证配置

要实现任意子域的Microsoft登录,核心是在Azure AD应用注册里配置合法的通配符重定向URI,再配合代码动态适配回调地址:

  1. 登录Azure门户,找到你的Azure AD应用注册,进入「身份验证」页面
  2. 添加Web平台,在「重定向URI」中输入通配符格式的地址,比如https://*.yourdomain.com/auth/microsoft/callback
    • 注意:Azure AD只允许单个通配符,且必须放在最左侧子域位置,sub.*.com这种格式不被支持
  3. 根据你的应用需求勾选「ID令牌」和「访问令牌」,保存配置

如果要允许任意Microsoft用户(个人、工作/学校账户)登录,记得把应用的租户ID设为common(而非具体的组织租户ID)。

代码示例(ASP.NET Core)

下面是适配通配符子域的身份验证配置代码,以ASP.NET Core为例:

Program.cs

var builder = WebApplication.CreateBuilder(args);

// 配置身份验证服务
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
    options.ClientId = builder.Configuration["AzureAd:ClientId"];
    options.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];
    // 使用common租户允许所有Microsoft账户登录
    options.Authority = "https://login.microsoftonline.com/common/v2.0";
    
    // 动态生成当前子域的回调URI
    options.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = context =>
        {
            var currentCallbackUri = $"{context.Request.Scheme}://{context.Request.Host}/signin-oidc";
            context.ProtocolMessage.RedirectUri = currentCallbackUri;
            return Task.CompletedTask;
        }
    };
    
    options.ResponseType = "code";
    options.Scope.Add("openid");
    options.Scope.Add("profile");
    options.SaveTokens = true;
});

builder.Services.AddAuthorization();

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();

app.MapGet("/", () => "已登录用户可访问此页面");
app.MapGet("/login", () => Results.Challenge(
    new AuthenticationProperties { RedirectUri = "/" }, 
    new[] { OpenIdConnectDefaults.AuthenticationScheme }
));

app.Run();

appsettings.json配置

{
  "AzureAd": {
    "ClientId": "你的应用注册ID",
    "ClientSecret": "你的应用密钥",
    "TenantId": "common"
  }
}

最佳实践

  • 强制HTTPS:Azure AD不允许HTTP协议的通配符重定向URI,所有子域必须配置HTTPS
  • 通配符范围控制:不要使用过于宽泛的通配符(比如*.com),限定到你的主域名下(如*.yourdomain.com),降低安全风险
  • 权限最小化:只请求必要的权限Scope,避免过度授权
  • 密钥安全:不要硬编码ClientSecret,优先用环境变量或Azure Key Vault存储敏感信息
  • 动态回调验证:在代码中可以额外校验当前请求的域名是否属于你的允许范围,防止恶意域名滥用通配符配置

隐藏/减少显示的reply_urls

Azure AD应用注册页面会直接展示所有已配置的重定向URI,无法直接隐藏,但可以通过以下方式减少显示数量:

  1. 合并为通配符URI:把多个具体子域的回调URI替换成一个通配符URI,比如将https://sub1.yourdomain.com/callback、https://sub2.yourdomain.com/callback合并为https://*.yourdomain.com/callback,这样配置页面只会显示一条记录
  2. 使用单一回调入口:如果是SPA应用,可以统一用主域名下的固定回调地址(如https://yourdomain.com/auth/callback),然后在前端根据当前子域做路由跳转,不需要为每个子域单独配置回调URI
  3. 清理无效URI:删除应用注册中不再使用的旧重定向URI,避免冗余显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:43:12