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

如何在启用Azure AD认证的Web应用中允许单页(aspx)匿名访问?

问题解答

一、将单个ASPX页面设为匿名访问

完全可以实现,主要通过Web.config配置和认证中间件调整来完成:

  • Web.config授权规则配置:在配置文件中添加<location>节点,指定目标ASPX页面的路径,设置允许所有匿名用户访问:
<location path="TargetPage.aspx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>
  • OWIN中间件排除路径(如果使用):如果Web应用基于OWIN集成Azure AD认证,需要在认证配置中跳过该页面的登录跳转。在Startup.cs的认证配置里添加判断:
public void ConfigureAuth(IAppBuilder app)
{
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            // 其他Azure AD认证配置项...
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                RedirectToIdentityProvider = context =>
                {
                    // 请求目标匿名页面时,取消登录跳转
                    if (context.Request.Path.Value.Equals("/TargetPage.aspx", StringComparison.OrdinalIgnoreCase))
                    {
                        context.HandleResponse();
                    }
                    return Task.CompletedTask;
                }
            }
        });
}
  • 无需修改Azure AD应用注册的全局设置,只要Web应用本地配置允许该路径匿名即可。

二、通过Azure令牌访问页面(无需用户登录)

这种场景适合服务间调用或后台任务访问,需要使用客户端凭据流获取令牌并验证:

  1. Azure AD配置:
    • 注册一个客户端应用(或使用现有应用),为其分配目标Web应用的应用权限(而非委托权限),并完成管理员同意。
  2. Web应用页面验证逻辑:
    在目标ASPX页面的代码后置文件中,添加Bearer令牌验证逻辑,确保只有携带有效Azure AD令牌的请求才能访问:
protected void Page_Load(object sender, EventArgs e)
{
    var authHeader = Request.Headers["Authorization"];
    if (string.IsNullOrEmpty(authHeader) || !authHeader.StartsWith("Bearer "))
    {
        Response.StatusCode = 401;
        Response.End();
        return;
    }

    var token = authHeader.Substring(7);
    var validationParams = new TokenValidationParameters
    {
        ValidAudience = "你的Web应用Client ID",
        ValidIssuer = $"https://login.microsoftonline.com/你的租户ID/v2.0",
        // 从Azure AD元数据端点自动获取公钥用于验证签名
        IssuerSigningKeys = new JsonWebKeySet("https://login.microsoftonline.com/你的租户ID/discovery/v2.0/keys").GetSigningKeys()
    };

    var tokenHandler = new JwtSecurityTokenHandler();
    try
    {
        tokenHandler.ValidateToken(token, validationParams, out _);
        // 令牌验证通过,正常加载页面内容
    }
    catch (SecurityTokenValidationException)
    {
        Response.StatusCode = 401;
        Response.End();
    }
}
  1. 客户端获取并使用令牌:
    客户端通过POST请求到Azure AD令牌端点https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token,携带参数client_id、client_secret、grant_type=client_credentials、scope=你的Web应用Client ID/.default,获取到令牌后,在请求页面时将令牌放入Authorization头(格式:Bearer {token})即可访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:53:26