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

ASP.Net Core MVC如何配置访客页与授权页的Azure AD认证规则?

解决方案

核心疑问解答

你完全可以通过[AllowAnonymous]特性将访客页面排除在全局认证要求之外,这种「默认拒绝所有未认证请求,仅放开明确指定的公开页面」的配置模式,是ASP.NET Core官方推荐的高安全级别权限方案,完全适配银行类站点的安全要求。

具体配置步骤

1. 安装依赖NuGet包

提前安装两个官方认证相关包:

  • Microsoft.Identity.Web
  • Microsoft.Identity.Web.UI

2. 配置Azure AD认证服务与全局授权规则

在Program.cs中添加如下配置,实现所有接口默认要求登录的全局规则:

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;

var builder = WebApplication.CreateBuilder(args);

// 注册Azure AD认证服务
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));

// 注入全局授权过滤器:所有Controller/Action默认要求用户已认证
builder.Services.AddControllersWithViews(options =>
{
    var authenticatedPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(authenticatedPolicy));
}).AddMicrosoftIdentityUI();

var app = builder.Build();

// 中间件顺序必须严格遵循:认证在前,授权在后
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

3. 填充Azure AD配置

在appsettings.json中添加你的Azure AD应用注册信息:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的Azure AD租户域名",
  "TenantId": "你的Azure AD租户ID",
  "ClientId": "Azure应用注册生成的客户端ID",
  "ClientSecret": "Azure应用注册生成的客户端密钥",
  "CallbackPath": "/signin-oidc"
}

4. 为公开页面放开权限

对首页、联系页等需要免登录访问的Action,直接添加[AllowAnonymous]特性即可绕过全局认证要求,示例如下:

public class HomeController : Controller
{
    // 首页免登录
    [AllowAnonymous]
    public IActionResult Index()
    {
        return View();
    }

    // 联系页免登录
    [AllowAnonymous]
    public IActionResult Contact()
    {
        return View();
    }

    // 未加特性的敏感页面默认需要登录,比如账户概览、交易明细等
    public IActionResult AccountOverview()
    {
        return View();
    }
}

安全注意事项

  • 银行类站点安全要求高,建议上线前全量扫描所有路由的权限配置,避免误将[AllowAnonymous]添加到敏感页面
  • 处理敏感数据的接口、后台管理页面禁止添加该特性
  • 建议同步开启Azure AD条件访问策略,进一步降低认证用户的访问风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:54:06