有条件允许匿名

时间:2015-12-21 21:16:38

标签: asp.net security asp.net-core-mvc

带有个人帐户的asp.net mvc6的默认模板在AccountController

中有以下方法
// GET: /Account/Register
[HttpGet]
[AllowAnonymous]
public IActionResult Register()
{
    return View();
}

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model) {
    ...
}

我想实现简单的某些,只有在没有用户注册的情况下才允许匿名访问Register方法

扩展AllowAnonymous过滤器是否正常/好,以便在返回true / false之前对Db进行检查,或者我应该以某种方式实现策略?

如果扩展属性或使用自定义策略不是一个好的解决方案,你推荐什么?

如果有人可以向我提供关于自定义逻辑的位置/方式的示例,那将会很好。

这个想法是针对管理部分的,因此只有注册用户才能注册新的用户。但是如果没有用户注册(首先在空数据库上部署),我希望用户能够使用用户名/密码进行注册。

从安全角度注意:请注意,只能注册特定于域的电子邮件,因此即使一个随机用户在没有用户注册的情况下点击公共面部注册页面,也无法注册他/她自己的个人电子邮件地址

如果我应该考虑任何额外的安全考虑,我愿意阅读它们。

1 个答案:

答案 0 :(得分:2)

由于这只是一次性的事情,我只是直接在Register中运行检查。创建自定义属性以装饰单个操作方法是过度的。

[HttpGet]
[AllowAnonymous]
public IActionResult Register()
{
    if (db.Users.Any())
    {
        return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
    }

    return View();
}

从技术上讲,由于您的帖子操作受CSRF保护,因此无法成功完成帖子而无需先执行get操作,但为了彻底,您可以将代码添加到两者中,如果您愿意