【问题标题】:ASP.NET Core 2.2 deleted user is AuthorizedASP.NET Core 2.2 已删除用户已授权
【发布时间】:2020-04-09 20:25:18
【问题描述】:

我正在使用带有 Core Identity 的 Razor 页面 - 所有模型都由 [Authorize] 属性标记。

在两个(不同的)Web 浏览器上,我登录了用户。

其中一个正在删除另一个 - 然后被删除的用户仍然是授权的!

我尝试直接从数据库中删除用户并且:

await _userManager.DeleteAsync(user);

还是这样

SignInManager.IsSignedIn(User)

返回 true 并且 AuthorizeAttribute 允许访问页面模型。

知道如何防止授权已删除的用户吗?

【问题讨论】:

    标签: asp.net-core authorization asp.net-core-identity


    【解决方案1】:

    当您删除用户时,他们的安全标记也会被删除。但是,安全标记只是每隔一段时间才会评估一次。

    根据SecurityStampValidationInterval 确定的下一次重新评估其安全标记后,将提示用户重新登录。默认情况下,安全标记每 30 分钟重新评估一次。

    如果您需要确保在删除用户后立即退出,则可以在 Startup.cs 中将 SecurityStampValidationInterval 时间跨度设置为零。这样就可以为每个请求重新评估安全标记。

    services.Configure<SecurityStampValidatorOptions>(options =>
    {
        // enables immediate logout, after updating the user's security stamp.
        options.ValidationInterval = TimeSpan.Zero;   
    });
    

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.identityoptions.securitystampvalidationinterval?view=aspnetcore-1.1

    【讨论】:

      【解决方案2】:

      该方法检查用户是否在浏览器中通过其 cookie 身份进行身份验证,该身份在您删除用户后仍然设置。 你可以看看here at the official documentation。我的方法是在用户被删除后删除 cookie 或使用 SignOutAsync function 为用户签名。

      您可以在官方文档中查看here。在那里你可以找到更多的属性、方法等等。

      【讨论】:

      • 您好,感谢您的回复。我认为不可能从另一个浏览器中删除 cookie:/
      • 没问题。您可以在删除用户后错误地删除 cookie。
      • 可悲的是,SignInManager.SignOutAsync 仅注销当前登录的用户,让我再次解释一下 -> 从一台计算机上,当用户当前在另一台计算机上登录时,我正在从数据库中删除用户。 [Authorize] 仍然给予授权,但用户在数据库中不存在。如何从其他网络浏览器注销用户?
      • 将此添加到您的问题中,这对我来说不清楚,也可能对其他人来说。您可以在其他浏览器中检查用户是否仍然存在,如果用户不再存在于数据库中,则调用注销方法
      • 你不能从数据库中获取用户注销用户并删除它。
      猜你喜欢
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2022-07-22
      • 2018-08-25
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多