使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

我正在使用 .NET Core 2.2 Razor Pages 中的 .NET Identity 处理 identityserver4 登录站点(服务器 UI),我有一个 javascript 模式警报,警告用户等待空闲超时,然后在达到超时时将用户重定向到通过设置 window.location 退出屏幕

我遇到的问题是快速入门示例中的 OnGet 显示用户提示注销,因为此时 logoutId 为空。我想在不提示用户的情况下注销。

目前,我通过将“autoLogout”参数传递到我的 Logout 页面来解决这个问题,该参数绕过了对 logoutId 的检查并设置 ShowLogoutPrompt = false。我知道这在某种程度上违背了检查 logoutId 以确保在没有提示的情况下安全注销的目的。

有没有更好的方法来做我想做的事情?

2019 年 7 月 16 日编辑:似乎处理空闲超时的“正确”方法是设置应用程序 cookie 的令牌到期时间(比如 20 分钟)并启用 SlidingExpiration,以便在用户刷新时更新令牌。有关这方面的好信息,请参阅此博客文章此 github 问题线程(包括来自 Brock Allen 的评论)以及MS 文档中的此信息

我的问题是这个解决方案有两个巨大的缺点。

  1. 如果用户通过令牌的时间跨度超过 50%,则 SlidingExpiration 仅刷新 cookie(请参阅此处MS 文档中的 SlidingExpiration 信息)。因此,如果他们将 9m59s 刷新为 20 分钟的令牌,他们将在 10 分钟而不是 20 分钟后超时。一种解决方法是将令牌生命周期设置为 40 分钟,这将为用户提供至少 20 分钟的空闲时间,但他们可以有长达 40 分钟的空闲时间,这是不可接受的。
  2. 我的要求之一是一种模式,用于警告用户即将超时并为他们提供继续/注销的选项。要使用这种 cookie 方法执行此操作,我需要从 Javascript 中的 cookie(或至少在我的 C# 中的 Razor 页面中)读取令牌到期时间,以使我能够确定何时显示警告。即使没有模态要求,我也需要知道令牌何时过期,以便我可以刷新页面以将用户发送到登录屏幕。我正在尝试使用以下代码读取到期时间,但在令牌刷新后无法读取正确的到期时间,直到第二次刷新页面,我不知道为什么。
    @(DateTime.Parse(((await Context.AuthenticateAsync()).Properties.Items)[".expires"]))

cookie 方法的另一个不太重要的缺点是,如果我设法实现了一个模态弹出窗口并且用户选择继续,那么页面将需要刷新以获取新令牌,此时任何未保存的数据都将丢失。我想如果他们超时,那么未保存的数据无论如何都会丢失,所以与上述相比,这是一个相对较小的问题。

我正在考虑回到我的原始解决方案,该解决方案具有所需的功能,但会被攻击者滥用,攻击者在空闲超时 javascript 中注意到我的 autoLogout 参数,然后可以使用它来提供指向注销页面的热链接。目前,冒这个险感觉是我最好的选择。

我觉得我在这个问题上陷入了困境,但仍然没有好的解决方案。令我惊讶的是,我想象中的一个常见用例(空闲超时带有警告,允许用户继续/注销)在这种身份验证技术中的表现如此糟糕。我错过了什么吗?我的棍子末端有错吗?

我在这里发布我的最终解决方案。它有效,但我不太喜欢它。作为参考,详细说明为什么我认为它有点 hacky,以及我认为主要缺点的详细信息,请参阅 7 月 16 日对我上面原始问题的编辑。

在添加身份服务器后的 ConfigureServices 中,我设置了 cookie 的 SlidingExpiration = true; ExpireTimeSpan = AppSettings.IdleTimeoutMins(请参阅此博客了解我如何设置 AppSettings):

// Rename the .AspNetCore.Identity.Application cookie and set up for idle timeout
services.ConfigureApplicationCookie(options =>
{
    options.Cookie.Name = "xxxx.Application";
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(_config.GetValue<int>("AppSettings:" + nameof(AppSettings.IdleTimeoutMins)));
});

我有一个部分 Razor 页面,其中我有 javascript 代码来向用户显示一个带有倒数计时器的模式警报。我从 AppSettings.IdleTimeoutMins 获得 timeoutSeconds 并且还有一个设置来确定何时显示警告。有关这一点(及其优缺点)的更多详细信息,请参阅我的其他问题和答案:如何在 Razor Page 中获取 ASP.NET Identity 身份验证票证到期?警告消息让用户可以选择“继续”刷新页面(并因此刷新身份验证票)或“注销”,将它们发送到注销确认页面。如果时钟耗尽,则刷新页面,使它们返回到登录屏幕。

在部分的顶部:

@inject RussellLogin.Services.IAppSettings AppSettings;
@using Microsoft.AspNetCore.Authentication;

获取票上剩余的(假设)秒数:

secondsRemaining = "@(DateTime.Parse(((await AuthenticationHttpContextExtensions
                                             .AuthenticateAsync(Context))
                                             .Properties
                                             .Items)[".expires"])
                     .Subtract(DateTime.Now)
                     .TotalSeconds)";
// If secondsRemaining is less than half the expiry timespan then assume it will be re-issued
if (secondsRemaining < timeoutSeconds / 2) {
    secondsRemaining = timeoutSeconds;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用identityserver4和asp.netcore身份进行用户管理

来自分类Dev

使用React SPA和Asp.net Core后端的IdentityServer4实现

来自分类Dev

如何正确使用 IdentityServer4 的声明?

来自分类Dev

混合使用 IdentityServer4 和 WebAPI .net 4.5.2

来自分类Dev

如何使用 FrontChannelLogout 从外部 IdentityServer4 注销 IdentityServer4 客户端

来自分类Dev

使用 IdentityServer4 和 Xamarin Android 使用资源所有者密码登录会话超时通知

来自分类Dev

带有aspnet核心MVC OIDC身份验证的IdentityServer4 - api范围限制?

来自分类Dev

IdentityServer4 和 Windows 身份验证

来自分类Dev

在 IdentityServer4 中,如何安全地存储 ReturnUrl?

来自分类Dev

一个项目中的 IdentityServer4 和 Web Api 无法通过身份验证

来自分类Dev

Ocelot,Identity,IdentityServer4和API资源,如何基于角色授予访问权限

来自分类Dev

使用IdentityServer4对API进行自定义JWT身份验证

来自分类Dev

IdentityServer4无法使用自定义用户存储添加ASP网络核心身份

来自分类Dev

如何创建签名证书并在生产中的IdentityServer4中使用它?

来自分类Dev

如何使用 IdentityServer4 验证 x509 签名凭据

来自分类Dev

在 IdentityServer4 中使用哪些 GrantType?

来自分类Dev

使用 IdentityServer4 刷新令牌

来自分类Dev

IdentityServer:如何创建用于EF支持和aspnet身份支持的数据库

来自分类Dev

在Identityserver4和自定义AuthorizationHandler User.Identity.isAuthenticated = false上使用客户端凭据流

来自分类Dev

NetCore 3.1将IdentityServer4与现有数据库和Users表一起使用

来自分类Dev

IdentityServer4 - 发生安全错误

来自分类Dev

使用AspNet.FriendlyUrls和AspNet.Identity从jquery.ajx调用网络方法期间,身份验证失败

来自分类Dev

使用AspNet.FriendlyUrls和AspNet.Identity从jquery.ajx调用网络方法期间,身份验证失败

来自分类Dev

如何仅使用AspNet发送和接收身份验证票

来自分类Dev

如何在MVC应用程序中使用JWT,其中使用IdentityServer4的一些JavaScript部分

来自分类Dev

在 IdentityServer4 中,您可以在 client_credentials 身份验证中使用“*”作为请求的范围吗?

来自分类Dev

IdentityServer4、Angular 和 .NET CORE Api

来自分类Dev

OpenID Connect 和 IdentityServer4:API 与作用域

来自分类Dev

使用ASPNET身份和WEB FORMS消费扩展属性(VS2013.3)

Related 相关文章

  1. 1

    如何使用identityserver4和asp.netcore身份进行用户管理

  2. 2

    使用React SPA和Asp.net Core后端的IdentityServer4实现

  3. 3

    如何正确使用 IdentityServer4 的声明?

  4. 4

    混合使用 IdentityServer4 和 WebAPI .net 4.5.2

  5. 5

    如何使用 FrontChannelLogout 从外部 IdentityServer4 注销 IdentityServer4 客户端

  6. 6

    使用 IdentityServer4 和 Xamarin Android 使用资源所有者密码登录会话超时通知

  7. 7

    带有aspnet核心MVC OIDC身份验证的IdentityServer4 - api范围限制?

  8. 8

    IdentityServer4 和 Windows 身份验证

  9. 9

    在 IdentityServer4 中,如何安全地存储 ReturnUrl?

  10. 10

    一个项目中的 IdentityServer4 和 Web Api 无法通过身份验证

  11. 11

    Ocelot,Identity,IdentityServer4和API资源,如何基于角色授予访问权限

  12. 12

    使用IdentityServer4对API进行自定义JWT身份验证

  13. 13

    IdentityServer4无法使用自定义用户存储添加ASP网络核心身份

  14. 14

    如何创建签名证书并在生产中的IdentityServer4中使用它?

  15. 15

    如何使用 IdentityServer4 验证 x509 签名凭据

  16. 16

    在 IdentityServer4 中使用哪些 GrantType?

  17. 17

    使用 IdentityServer4 刷新令牌

  18. 18

    IdentityServer:如何创建用于EF支持和aspnet身份支持的数据库

  19. 19

    在Identityserver4和自定义AuthorizationHandler User.Identity.isAuthenticated = false上使用客户端凭据流

  20. 20

    NetCore 3.1将IdentityServer4与现有数据库和Users表一起使用

  21. 21

    IdentityServer4 - 发生安全错误

  22. 22

    使用AspNet.FriendlyUrls和AspNet.Identity从jquery.ajx调用网络方法期间,身份验证失败

  23. 23

    使用AspNet.FriendlyUrls和AspNet.Identity从jquery.ajx调用网络方法期间,身份验证失败

  24. 24

    如何仅使用AspNet发送和接收身份验证票

  25. 25

    如何在MVC应用程序中使用JWT,其中使用IdentityServer4的一些JavaScript部分

  26. 26

    在 IdentityServer4 中,您可以在 client_credentials 身份验证中使用“*”作为请求的范围吗?

  27. 27

    IdentityServer4、Angular 和 .NET CORE Api

  28. 28

    OpenID Connect 和 IdentityServer4:API 与作用域

  29. 29

    使用ASPNET身份和WEB FORMS消费扩展属性(VS2013.3)

热门标签

归档