当用户离线使用Angular PWA时如何处理身份验证?

时间:2019-02-18 13:21:23

标签: angular authentication identityserver4 progressive-web-apps

我有一个angularPWA应用程序。我主要关心的是允许用户离线使用应用程序而无需连接互联网。 问题是:我该如何使用IdentityServerOIDC? 我正在考虑以下解决方案:假设我有一个有效的“刷新令牌”,那么只要Internet连接处于脱机状态,我就会认为该用户仍在身份验证中。当然,这意味着用户已经在“联机”时登录。

关于在“离线”时处理“登录”的任何建议。例如,Windows OS使用某种“本地存储”来进行身份验证用户,即使他们没有Internet连接也是如此。 任何建议,感激

3 个答案:

答案 0 :(得分:4)

假设用户已连接互联网并登录到应用程序:

  • 保存刷新令牌localstorage.setItem('resfreshToken', yourToken)
  • 当用户打开应用程序时,请检查localstorage.getItem('refereshToken')
  • 如果它不为null或为空,则对用户进行身份验证。

据我所知refresh tokens不会过期,因此您始终可以使用刷新令牌来获取新令牌。因此,当互联网连接恢复时,您可以使用refresh token来请求新的access token并提交数据更改。

答案 1 :(得分:1)

关于您的评论:

  

我关心的是“令牌已过期”,即使用户处于“离线”状态,也允许用户“使用”应用程序

我将在应用程序内部创建某种形式的验证,以限制用户可以离线使用应用程序的时间,例如时间戳。一旦此时间到期,您可以删除访问/刷新令牌并强制登录(即,强制用户再次在线并运行新的身份验证/授权过程)。

答案 2 :(得分:1)

我看到OIDC没有这样的功能。

如果用户是interceptor,则可以签入online。如果没有,您可以使用IndexedDB来存储请求。

您可以通过event订阅Renderer2 listen。如果发生事件,请通知服务尝试从IndexedDB获取操作,并在刷新令牌后重播它们。

如果您使用redux,还可以保存无法完成的操作。