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

Authentication 如何保持用户以隐式流登录?,authentication,oauth-2.0,authorization,jwt,openid-connect,Authentication,Oauth 2.0,Authorization,Jwt,Openid Connect,据我所知,隐式流的最终结果是访问令牌,它允许客户端(在我的例子中是JS SPA)向资源服务器(API)进行身份验证 访问令牌通常仅在约1小时内有效,然后过期-使其无效 那么我的JS应用程序应该做什么呢?将用户重定向回身份验证服务器是不现实的,因为用户必须每1小时重新输入其凭据 我还知道隐式流不支持刷新令牌,所以我也不能使用它们 是否有办法保持用户登录?Facebook之类的东西如何让您无限期地登录?如果OP上的会话仍然处于活动状态(可能通过cookie),则OpenID Connect有一种机制

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

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

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

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


是否有办法保持用户登录?Facebook之类的东西如何让您无限期地登录?

如果OP上的会话仍然处于活动状态(可能通过cookie),则OpenID Connect有一种机制来刷新(隐藏)iframe中的令牌:
提示符=无

根据,当发送此流时

授权服务器不得显示任何身份验证或同意用户界面页面。如果最终用户尚未通过身份验证,或者客户端未预先配置对请求的声明的同意,或者未满足处理请求的其他条件,则返回错误。错误代码通常为需要登录、需要交互或第3.1.2.6节中定义的其他代码。这可以用作检查现有身份验证和/或同意的方法


prompt=none
也可从中引用。

只是为了澄清,您询问的是隐式流,该隐式流在而非OpenID Connect中详细介绍,后者更多地处理用户身份验证

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

您可以使用AJAX调用在后台通道上获取令牌,这样您的SPA应用程序用户体验就不会受到获取新令牌需求的影响

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

访问令牌通常仅在约1小时内有效,然后过期- 使它无用

然后用户必须每1小时重新输入其凭据

不一定

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

有没有办法保持用户的登录

你不能从水疗中心控制它。这完全取决于用户是否登录到身份提供商。如果他们继续登录facebook、google(或应用程序使用的任何IDP),那么你应该能够以非交互方式获得代币


很好地解释了隐式流是如何实现的

这不需要用户打开我的JS应用程序吗?如果我想在不打开应用程序的情况下保持会话,该怎么办?另外,我可以通过AJAX而不是隐藏的iframe发出此请求吗?OpenID Connect与OpenID不同,它同时进行身份验证和授权。您说的是用户是否保持登录到身份提供程序。但他们自己如何保持登录状态?当然这意味着他们在使用一些长寿命的代币(cookie)。但是,这难道不会像SPA一样受到安全影响,因为它不安全,不能信任它的秘密吗?i、 e.这些服务如何根据自己的资源进行身份验证?