身份框架用户锁定

2024-04-26

我尝试在 3 次登录尝试失败后锁定用户登录 5 分钟。我已将这 3 行添加到App_Start/IdentityConfig.cs public static ApplicationUserManager Create( ... ) method:

manager.MaxFailedAccessAttemptsBeforeLockout = 3;
manager.DefaultAccountLockoutTimeSpan = new TimeSpan(0, 5, 0);
manager.UserLockoutEnabledByDefault = true;

之后我通过注册新用户POST /api/Account/Register(在默认脚手架中AccountController)。帐户已创建并且LockoutEnabled属性设置为true。但如果我尝试通过以下方式登录POST /Token密码错误几次,帐户不会被锁定。

我也感兴趣在哪里实施/Token端点。是否在AccountController GET api/Account/ExternalLogin。我在那里设置了断点,但当我尝试登录时,执行并没有停止。

我缺少什么?


如果您使用 Visual Studio 中的默认 Web API 模板,则必须更改GrantResourceOwnerCredentials的方法ApplicationOAuthProvider类(在 Web API 项目的 Provider 文件夹中找到)。像这样的东西可以让您跟踪失败的登录尝试,并阻止锁定的用户登录:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

    var user = await userManager.FindByNameAsync(context.UserName);

    if (user == null)
    { 
        context.SetError("invalid_grant", "Wrong username or password."); //user not found
        return;
    }

    if (await userManager.IsLockedOutAsync(user.Id))
    {
        context.SetError("locked_out", "User is locked out");
        return;
    }

    var check = await userManager.CheckPasswordAsync(user, context.Password);

    if (!check)
    {
        await userManager.AccessFailedAsync(user.Id);
        context.SetError("invalid_grant", "Wrong username or password."); //wrong password
        return;
    }

    await userManager.ResetAccessFailedCountAsync(user.Id);

    ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
       OAuthDefaults.AuthenticationType);
    ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
        CookieAuthenticationDefaults.AuthenticationType);

    AuthenticationProperties properties = CreateProperties(user.UserName);
    AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
    context.Validated(ticket);
    context.Request.Context.Authentication.SignIn(cookiesIdentity);
}

请注意,这样您只能锁定尝试使用以下方式登录的用户passwordgrant(资源所有者凭证)。如果您还想禁止锁定的用户使用其他授权登录,则必须覆盖其他方法(GrantAuthorizationCode, GrantRefreshToken等),检查是否await userManager.IsLockedOutAsync(user.Id)这些方法也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

身份框架用户锁定 的相关文章

随机推荐

  • 使用 Google 翻译翻译整个 Google 表格

    我有一张用日语写的 Google 表格 我需要将其转换成英文 我知道我们可以使用googletranslate
  • SSIS 与 DTS 性能

    这么晚了才这么做似乎很疯狂 但是 我正在使用 Rocket Software UniVerse 源和 SQL 目标重建一些 ETL 基础设施 旧的目标平台是 Windows Server 2003 上的 SQL 2000 新平台是 Wind
  • 如何检查一个点是否在给定半径内?

    我有以下代码 需要很长时间才能执行 pandas 数据框df and df plants非常小 小于 1Mb 我想知道是否有任何方法可以优化这段代码 import pandas as pd import geopy distance imp
  • 如何在 Ruby 中获取从位置 N 到最后一个字符的子字符串?

    我想从字符串中获取从位置 N 到字符串末尾的子字符串 在 Ruby 中如何做到这一点 只需将字符串切片即可 string N 1
  • 简单版jQuery live函数

    是否有可能在任何地方获得一个纯 Javascript 函数用于事件处理程序 其功能与 jQuery 类似live 我需要能够将事件附加到尚未创建的对象 但由于依赖于 jQuery 核心 jquery livequery 和 jquery e
  • 如何使用Python和Pandas在时间翻转时添加24小时

    我必须分析一些日志 并基于此 我必须计算一些东西 但我坚持了一件事 在这里 我尝试以简单的形式重新创建我的问题 假设我有以下日志 堆栈溢出 txt file 23 58 03 458 23 58 13 446 23 58 23 447 23
  • Visual Studio 网站中的项目设置实际存储在哪里?

    在 VS2010 中使用网站 而不是 Web 应用程序 因此没有 csproj 文件 右键单击解决方案资源管理器中的 站点 节点并选择 属性页 会弹出一个对话框 其中包含 引用 生成 辅助功能 启动选项 MSBuild 选项 和 Silve
  • 下载 VSTS 附件

    有人知道如何使用 C 库检索附件 ID 并从 VSTS 下载 WorkItem 附件吗 我已经审查了附件样本 https github com Microsoft vsts dotnet samples blob master Client
  • Symfony ArrayCollection 与 PersistentCollection

    据我了解 当您通过存储库查询数据库时 您会得到 PersistentCollection 而当您使用实体时 您会得到 ArrayCollection 因此 考虑到我的用户实体有一对多的自引用关系 在我的用户实体中 我有一个 setChild
  • WPF 中的多列树视图 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道我在哪里可以获得 WPF 中的多列树视图之类的控件吗 夏普开发 http www icshar
  • Xalan XSLT 多个输出文件?

    我只是想知道 是否可以使用 Xalan 将单个输入 XML 文件的处理输出到多个其他文件 我不一定必须这样做 我知道我可以使用其他工具来做到这一点 如 Saxon 和 或我可以处理不同的文件以获得不同的输出 我只是想知道我必须使用哪些选项来
  • 无法计算表达式 - Visual Studio 调试模式

    当尝试单步执行代码并使用 Visual Studio 中的立即窗口或监视窗口时 我不断收到以下信息 无法评估表达式 我正在使用 Visual Studio 2008 搜索论坛 有很多关于使用重载的 Response Redirect 并将
  • 如何确定单元测试的测试用例?

    我刚刚开始单元测试 并编写了一些简短的测试来检查名为 isPrime 的函数是否正常工作 我有一个测试来检查该函数是否正常工作 并有一些数字和预期返回值形式的测试数据 我应该测试多少 我如何决定测试哪个 这里的最佳实践是什么 一种方法是生成
  • 从另一个 Java 小程序访问 Java 小程序

    Web 应用程序使用 Java 小程序 该小程序将用户提交的密码存储在私有属性中 并在多个公共方法中使用该属性 我想知道从相同或不同网站加载的另一个 Java 小程序是否可以调用该小程序的方法或可能访问包含密码的私有属性 不同的小程序是在相
  • 当您在 REST 中需要更多动词时该怎么办

    还有一个类似的question https stackoverflow com questions 2001773 understanding rest verbs error codes and authentication对我来说 但讨
  • “node-sass”用法已弃用,并将在未来的主要版本中删除

    当我从 Angular 升级时8 to 11我面临这个警告 node sass 用法已弃用 并将在未来的主要版本中删除 要选择退出已弃用的行为并开始使用 sass 请卸载 node sass 谁能帮我提前致谢 完整的错误消息是 node s
  • .Net Core 本地化视图:Linq 表达式中的 IViewLocalizer

    我正在 net core 中编写 mvc 应用程序 我遇到本地化问题 我不知道如何将 IViewLocalizer 添加到我的网格视图中 这是我的代码 using NonFactors Mvc Grid using Microsoft As
  • 流星刀片模板在 for 循环中抛出“同一分支中的第二个地标”异常

    我有一个 for 循环 我想在其中包含模板视图 表 刀片 game h1 table name if table playerSitting a btn btn danger stand href Stand table for var i
  • 如何使用 google-apps-script 以 Google 表单导入“文件上传”模块

    I am able to create a small google form using google apps script Which includes texts radio buttons etc But how to inclu
  • 身份框架用户锁定

    我尝试在 3 次登录尝试失败后锁定用户登录 5 分钟 我已将这 3 行添加到App Start IdentityConfig cs public static ApplicationUserManager Create method man