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

含Microsoft Identity的.NET Angular项目中自定义Razor页面无法继承授权

问题解决:自定义Razor页面无法识别Microsoft Identity用户身份

问题现象

在集成Microsoft Identity的.NET + Angular项目中:

  • 新增的/error/404 Razor页面(位于/Pages/ErrorPages目录)无法识别已登录用户,始终显示未认证状态
  • 点击顶部菜单的登录按钮,能正常跳转到/Identity/Account/Login完成认证,但返回自定义页面后身份仍不生效
  • Microsoft Identity自带页面(如Account/Login)和Angular页面均可正常识别用户授权状态
  • 将该404页面移至Areas/Identity/Manage目录下时,身份识别恢复正常

核心原因

Identity区域(Areas/Identity)默认继承了专门的认证配置,而主/Pages目录下的页面未正确关联Identity的认证方案,或者Cookie认证的路径/作用域配置限制了身份信息的读取。

具体解决方案

1. 确保Cookie认证的路径为根目录

检查Program.cs中的认证配置,确保Cookie的Path设置为/(默认值,但可能被修改),让Cookie在整个站点生效:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Path = "/"; // 关键:确保Cookie作用域覆盖所有路径
        options.LoginPath = "/Identity/Account/Login";
        options.LogoutPath = "/Identity/Account/Logout";
    });

2. 给自定义Razor页面指定认证方案

由于Identity默认使用Identity.Application作为认证方案,直接在页面或PageModel上指定该方案:

方式一:在Razor页面头部添加特性

@page
@model WebApplication1.Pages.ErrorPages._404Model
@attribute [Authorize(AuthenticationSchemes = "Identity.Application")]
@{
}
<h1>404 - THIS PAGE WAS NOT FOUND</h1>
@(User.IsInRole("Admin") ? ",AUTHENTICATED" : "NOT AUTHENTICATED")

方式二:在PageModel类上添加特性

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages.ErrorPages
{
    [Authorize(AuthenticationSchemes = "Identity.Application")]
    public class _404Model : PageModel
    {
        public void OnGet()
        {
        }
    }
}

3. 检查中间件顺序

确保Program.cs中的中间件顺序正确,认证中间件必须放在路由和端点之前:

app.UseHttpsRedirection();
app.UseStaticFiles();

// 认证中间件必须在路由之前
app.UseAuthentication();
app.UseAuthorization();

app.UseRouting();

app.MapRazorPages();
app.MapControllers();
app.MapFallbackToFile("index.html"); // Angular的 fallback 路由

4. 统一全局认证配置(可选)

如果项目中Identity区域的_ViewImports.cshtml有单独的认证配置,可将其全局化,让主Pages目录共享:
删除Areas/Identity/_ViewImports.cshtml中除@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers之外的认证相关标签助手,统一在根目录的_ViewImports.cshtml中配置。

验证方法

完成上述配置后,重新登录用户,访问/error/404页面,即可正常显示用户的认证状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:45:05