使用 ASP.NET Core Identity 时,如何在 ASP.NET Core Web 应用程序模板中限制访问

How is access restricted in the ASP.NET Core web app template when using ASP.NET Core Identity

我有一个 ASP.NET Core 5 网络应用程序,它使用 ASP.NET Core Identity 进行授权。我搭建了所有 Identity UI 的脚手架,这样我就可以看到它是如何工作的。

在“身份”区域的脚手架 Razor 页面中,我可以看到几个用 [AllowAnonymous] 装饰的页面模型 类,但我看不到任何对 限制访问。

不过,肯定有什么地方,因为模板网站中的某些页面在未登录时可以访问(即使它们没有 [AllowAnonymous]),但脚手架中的大多数页面 Identity 区域 不可 访问,除非登录。

这是如何实现的?我希望看到对 AuthorizeFolder(或 AuthorizeAreaFolder)的调用,但我在项目中的任何地方都看不到。

我想添加一些我自己的授权规则,但我想在开始进行更改之前了解现有规则是什么。

保持对身份 UI 的完全控制,运行 身份脚手架和 select 覆盖所有文件。

您可能希望执行此操作以完全控制身份 UI。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>()
        // services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = $"/Identity/Account/Login";
        options.LogoutPath = $"/Identity/Account/Logout";
        options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
    });

    // using Microsoft.AspNetCore.Identity.UI.Services;
    services.AddSingleton<IEmailSender, EmailSender>();
}

参考:Create full Identity UI source

Simple authorization in ASP.NET Core

Razor Pages authorization conventions in ASP.NET Core