ASP.Net Core MVC如何配置访客页与授权页的Azure AD认证规则?
解决方案
核心疑问解答
你完全可以通过[AllowAnonymous]特性将访客页面排除在全局认证要求之外,这种「默认拒绝所有未认证请求,仅放开明确指定的公开页面」的配置模式,是ASP.NET Core官方推荐的高安全级别权限方案,完全适配银行类站点的安全要求。
具体配置步骤
1. 安装依赖NuGet包
提前安装两个官方认证相关包:
Microsoft.Identity.WebMicrosoft.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
相关产品推荐
相关产品推荐

