C# 如何禁用web应用程序公共端的注册?

C# 如何禁用web应用程序公共端的注册?,c#,asp.net-core-mvc,identity,C#,Asp.net Core Mvc,Identity,我在.NETCore2.2上有一个简单的web应用程序。我只希望获得申请的公开授权。您可以问我“如果我只有授权,我将在哪里为我的系统引入新用户?”。我想手动创建用户。在我看来,这项任务非常简单。任何web框架都有一些功能。但我找不到文明的方法来实现.NET内核 所以,事实上我有一个很难看的方法。我刚刚添加了这个中间件: 示例表单Startup.cs文件 public void配置(IApplicationBuilder应用程序,IHostingEnvironment环境) { //如果不是本地环

我在.NETCore2.2上有一个简单的web应用程序。我只希望获得申请的公开授权。您可以问我“如果我只有授权,我将在哪里为我的系统引入新用户?”。我想手动创建用户。在我看来,这项任务非常简单。任何web框架都有一些功能。但我找不到文明的方法来实现.NET内核

所以,事实上我有一个很难看的方法。我刚刚添加了这个中间件:

示例表单
Startup.cs
文件

public void配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
//如果不是本地环境,则禁用注册
应用程序使用(异步(上下文,下一步)=>
{
if(环境和环境(“本地”))
{
等待next.Invoke();
}
其他的
{
if(context.Request.Path.ToString()包含(“寄存器”)||
context.Request.Path.ToString()包含(“ForgotPassword”))
{
wait context.Response.WriteAsync(“注册已关闭”);
}
其他的
{
等待next.Invoke();
}    
}
});
如您所见,如果环境是本地的,我可以注册一个新用户。否则,注册将关闭

我知道这种方法不好,我已经开始研究如何改进。我的计划是覆盖
AcountController
和用户注册方法的附加条件。我知道有这种工具。它可以生成身份脚手架。但它不能生成
AccountController
!只有视图。我试图<代码>AccountController手动,但未成功。我将向您展示:

公共类AccountController:控制器
{
私有只读用户管理器_UserManager;
专用只读签名管理器\u签名管理器;
公共帐户控制器(SignInManager SignInManager、UserManager UserManager)
{
_signInManager=signInManager;
_userManager=userManager;
}
[HttpGet]
公共IActionResult登录()
{
返回NotFound();
}
}
我希望上面的代码关闭登录,使我的404而不是登录。但登录工作

这个任务很简单:通过授权创建web应用程序,但不需要注册(只有开发人员可以添加新用户)。如何为.Net Core创建它

我把身份设置放在这里:

services.AddDefaultIdentity()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores();
答案就在这里

简而言之,我只需要修改
Register.cshtml.cs
文件。它在这里:

我的修改是:

    public IActionResult OnGet()
    {
        if (!_hostingEnvironment.IsEnvironment("Local"))
        {
            return RedirectToPage("/Account/Login");
        }

        return RedirectToPage("/Account/Register");
    }

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");
        if (ModelState.IsValid && _hostingEnvironment.IsEnvironment("Local"))
        {
            var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
            var result = await _userManager.CreateAsync(user, Input.Password);
            if (result.Succeeded)
            {
                _logger.LogInformation("User created a new account with password.");

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmail",
                    pageHandler: null,
                    values: new { userId = user.Id, code = code },
                    protocol: Request.Scheme);

                await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                    $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                await _signInManager.SignInAsync(user, isPersistent: false);
                return LocalRedirect(returnUrl);
            }
            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
        }

        // If we got this far, something failed, redisplay form
        return Page();
    } 
public IActionResult OnGet()
{
如果(!\u hostingEnvironment.IsEnvironment(“本地”))
{
返回重定向Topage(“/Account/Login”);
}
返回重定向Topage(“/Account/Register”);
}
公共异步任务OnPostAsync(字符串returnUrl=null)
{
returnUrl=returnUrl??Url.Content(“~/”);
if(ModelState.IsValid&&u hostingEnvironment.IsEnvironment(“本地”))
{
var user=newidentityuser{UserName=Input.Email,Email=Input.Email};
var result=await\u userManager.CreateAsync(用户,输入,密码);
if(result.successed)
{
_logger.LogInformation(“用户使用密码创建了一个新帐户”);
var code=wait_userManager.GenerateEmailConfirmationTokenAsync(用户);
var callbackUrl=Url.Page(
“/Account/ConfirmEmail”,
pageHandler:null,
值:new{userId=user.Id,code=code},
协议:请求。方案);
等待_emailSender.sendmailasync(Input.Email,“确认您的电子邮件”,
$“请确认您的帐户。”);
wait _signInManager.SignInAsync(用户,ispersist:false);
返回LocalRedirect(returnUrl);
}
foreach(result.Errors中的变量错误)
{
AddModelError(string.Empty,error.Description);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回页();
} 
现在,如果我的环境是
本地的
,我可以注册一个新用户。但这不是很安全。更好的方法是为注册新用户制作简单的控制台应用程序

如果你想在本地开发期间注册用户,你也可以编写一个非常简单的控制台应用程序,连接到DB并填充初始用户列表。毕竟,正如你提到的,注册不是你应用程序的一部分,因此如果你减少表面攻击区域,那肯定会更好