如何使用隐式流保持用户登录?

5 authentication authorization oauth-2.0 jwt openid-connect

据我所知,隐式流的最终结果是访问令牌,它允许客户端(在我的情况下是 JS SPA)向资源服务器(API)进行身份验证。

访问令牌通常仅在大约 1 小时内有效,然后就会过期 - 使其变得无用

那么我的 JS 应用程序应该做什么?将用户重定向回身份验证服务器是不现实的,因为用户将不得不每 1 小时重新输入一次他们的凭据!

我也知道隐式流不支持刷新令牌,所以我也不能使用它们。

有没有办法保留用户的登录信息?Facebook 之类的东西如何让您无限期地登录?

ian*_*man 2

只是为了澄清一下,您是在询问OAuth 2.0 RFC中详细介绍的隐式流程,而不是 OpenID Connect,后者更多地处理用户身份验证?

通过你所做的隐式流程定期调用授权端点来获取新令牌,但如果用户保持登录其身份提供者的状态,则不应提示他们重新提交其凭据,并且令牌将作为哈希片段返回在重定向 uri 中,无需用户交互。

您可以使用 AJAX 调用在反向通道上获取令牌,以便您的 SPA 应用程序用户体验不会因需要获取新令牌而受到影响。

为了解决您在问题中强调的要点:

访问令牌通常仅有效约 1 小时,然后就会过期 - 使其变得无用。

正确的!

那么用户必须每 1 小时重新输入一次凭据!

不必要。

如果用户保持登录到身份提供商(例如 facebook、google),则用户和该提供商之间将存在一个浏览器 cookie。这实际上意味着身份提供商不需要用户重新输入凭据。授权服务器应该能够向您返回一个令牌,而无需交互。

有没有办法保持用户的登录状态?

您无法通过 SPA 控制它。这完全取决于用户是否保持登录到身份提供商。如果他们保持登录 Facebook、Google(或您的应用程序使用的任何 IDP),那么您应该能够以非交互方式获取令牌。

本文很好地解释了如何实现隐式流程。