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

如何在带独立身份验证的ASP.NET Core项目中仅允许管理员创建账户?

解决ASP.NET Core MVC限制注册页面访问的问题

方法一:生成Identity注册页面并添加授权特性

ASP.NET Core Identity的默认注册页面封装在Razor类库(RCL)中,所以你看不到本地文件。要修改它,需先将相关页面scaffold到项目中:

  • 在Visual Studio中,右键项目 →「添加」→「新建搭建基架项」→ 选择「Identity」→ 点击「添加」
  • 在弹出窗口中,勾选「Register」相关选项(包括Register页面、对应PageModel),选择现有DbContext完成生成
  • 找到生成的Register.cshtml.cs文件,在PageModel类上方添加授权特性:
    [Authorize(Policy = "AdminOnly")] // 用自定义策略限制仅管理员访问,或直接用[Authorize]限制已登录用户
    public class RegisterModel : PageModel
    {
        // 原有代码
    }
    

匿名用户访问注册页面时,会按授权配置被重定向或拦截。

方法二:通过中间件拦截注册请求

若不想生成Identity页面,可通过中间件拦截匿名用户对注册路径的访问:
在Program.cs中添加以下中间件(需放在UseAuthentication()之后、UseAuthorization()之前):

app.Use(async (context, next) =>
{
    // 匹配Identity默认注册路径,可根据实际路由调整
    if (context.Request.Path.StartsWithSegments("/Identity/Account/Register") 
        && !context.User.Identity.IsAuthenticated)
    {
        // 重定向到首页或指定页面
        context.Response.Redirect("/");
        return;
    }
    await next();
});

关于独立身份验证的支持

完全支持。如果是自定义身份验证逻辑(不依赖Identity默认UI),可直接在注册接口/页面的控制器动作上添加授权特性:

[Authorize(Policy = "AdminOnly")]
public IActionResult Register()
{
    // 注册页面逻辑
}

也可通过路由配置、过滤器等方式限制访问,权限规则完全由你掌控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:24:27