【问题标题】:Handling expired Azure AD session in asp.net core and angular app在 asp.net 核心和 Angular 应用程序中处理过期的 Azure AD 会话
【发布时间】:2018-03-29 14:13:36
【问题描述】:

我有一个 Asp.Net 核心项目,其中托管了一个 Angular 应用程序。 asp.net 核心项目中有几个 API 控制器。这些控制器是从 Angular 应用程序中调用的。

asp.net 核心应用受到 Azure AD 身份验证的保护,该身份验证使用 OpenIdConnect 和 Cookie。我正在看的是我应该如何为用户处理通宵空闲会话的令牌到期。

目前,如果用户将恢复其已过期的浏览器会话,则会在从 Angular 应用程序进行的异步 API 调用上引发异常。我应该如何让 Angular App 将用户重定向回 Azure AD 应用程序的登录页面?。

【问题讨论】:

  • 您在使用 ADAL 吗?您要取回刷新令牌吗?
  • 是的,我正在使用 ADAL。我确实得到了刷新令牌。
  • 用户回来时刷新令牌是否过期?我只需使用您为用户拥有的刷新令牌获取一个新令牌。为此,有一个 ADAL 函数:AuthenticationContext.AcquireTokenByRefreshToken Method。如果刷新令牌也过期了,不妨重新开始认证过程。
  • 我们不能只调用“AcquireTokenAsync”并且不会使用刷新令牌来生成新的访问令牌吗?另外,如果会话被重新设置,那是不是意味着我们必须在重新设置令牌时重新启动整个身份验证过程?以及如何重新启动身份验证过程?通过要求用户关闭浏览器并重新启动?。
  • 我将令牌缓存管理移至 Sql Server 并完成应用程序重置后,应用程序现在能够在不丢失用户会话的情况下恢复。

标签: azure authentication asp.net-core azure-active-directory


【解决方案1】:

您可以在您的网络应用程序中实现一个隐藏的 iframe,它每 45 分钟左右向您的服务器发出一次请求。这样,您的令牌将在您的应用程序运行时始终有效。

This blog post 讨论了这个问题并解释了您的选择,包括显示一个按预定时间间隔发出请求的脚本。

【讨论】:

    【解决方案2】:

    我通过将令牌缓存移动到 Sql Server 解决了令牌过期问题。完成此操作后,如果当前内存中的令牌已过期,则使用来自 sql server 的刷新令牌来生成新的访问令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多