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

ASP.NET Core 6与Azure AD自定义登录路径配置咨询

解决自定义登录页触发Azure AD认证的配置方案

1. 调整认证服务核心配置

修改program.cs中的认证流程代码,将默认认证方案切换为Cookie并指定自定义登录路径,同时保留Azure AD的OpenIdConnect配置作为外部认证源:

// 替换原authentication pipeline段代码
var initialScopes = builder.Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Login/Index"; // 未认证用户跳转至自定义登录页
        options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
        options.SlidingExpiration = true;
    })
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
        .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi"))
            .AddInMemoryTokenCaches();

2. 确认匿名访问权限配置

你已配置/Login文件夹允许匿名访问,可保持现有代码:

builder.Services.AddRazorPages().AddRazorPagesOptions(options =>
{
    options.Conventions.AllowAnonymousToFolder("/Login");
    options.Conventions.AuthorizeFolder("/");
    options.Conventions.AuthorizeFolder("/files");
});

3. 在自定义登录页添加认证触发按钮

在/Login/Index.cshtml中添加触发Azure AD认证的按钮:

<form method="post">
    <button type="submit" asp-page-handler="AzureADLogin">使用Azure AD登录</button>
</form>

对应在/Login/Index.cshtml.cs中实现认证触发逻辑:

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace Project.Pages.Login;

public class IndexModel : PageModel
{
    public async Task<IActionResult> OnPostAzureADLoginAsync()
    {
        // 启动OpenIdConnect认证流程
        return Challenge(OpenIdConnectDefaults.AuthenticationScheme);
    }
}

4. 验证全局授权策略

确保Controllers的全局授权策略正确,未认证用户访问受保护路径时会跳转至自定义登录页:

builder.Services.AddControllers(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

核心逻辑说明

  • 将默认认证方案设为Cookie后,未认证用户访问受保护资源时,系统会优先跳转至LoginPath指定的自定义登录页,而非直接导向Azure AD登录界面。
  • 点击登录按钮触发的Challenge方法会启动Azure AD的OpenIdConnect认证流程,用户完成AD登录后会自动跳转至之前访问的受保护页面(或首页)。
  • 原有的Azure AD下游API调用(如Microsoft Graph)配置不受影响,可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:45:46