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

标签 authentication oauth-2.0 authorization jwt openid-connect

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

访问 token 通常仅在大约 1 小时内有效,然后过期 - 使其无用 .

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

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

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

最佳答案

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

使用隐式流程,您必须定期调用授权端点以获取新 token ,但如果用户保持登录其身份提供者,则不应提示他们重新提交其凭据,并且 token 将作为哈希片段返回在重定向 uri 中,无需用户交互。

您可以使用 AJAX 调用在后台 channel 上获取 token ,这样您的 SPA 应用程序用户体验就不会受到需要获取新 token 的影响。

要解决您在问题中突出显示的要点:

The access token is usually only valid for ~1 hour, then it expires - making it useless.



正确的!

then the user will have to reenter their credentials every 1 hour!



不必要。

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

Is there a way to persist the user's login?



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

This article很好地解释了如何实现隐式流。

关于authentication - 如何使用隐式流保持用户登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47632111/

相关文章:

web-services - OAuth 2 : separating resource server and authorization server

model-view-controller - 为什么身份验证通常在 MVC 的 Controller 中?

docker - 用于多个服务的 protected Httponly cookie

node.js - 模拟请求对象不适用于 Node.js 中的测试

javascript - 使用 AJAX/jQuery 在网络摄像机上进行 HTTP 基本授权

Java -Spring Boot - OAuth 2.0配置实现Google账户登录

android - Google Maps Android API 授权失败 - 这项服务在过去几个月内有变化吗?

authentication - Nuxt Auth 不适用于 Google 策略

java - 在 Helper 类中使用 ApplicationContext

authentication - 为什么我们在 Header 上传递身份验证 token ?