Oauth 2.0 OpenId连接隐式流,如何维护会话
我正在构建一个Angular SPA应用程序,并将Okta用作Idp。因为这是一个SPA,所以我想我需要使用隐式流。我这里有两个问题-Oauth 2.0 OpenId连接隐式流,如何维护会话,oauth-2.0,single-sign-on,openid-connect,okta,okta-api,Oauth 2.0,Single Sign On,Openid Connect,Okta,Okta Api,我正在构建一个Angular SPA应用程序,并将Okta用作Idp。因为这是一个SPA,所以我想我需要使用隐式流。我这里有两个问题- 由于在隐式流中没有发布刷新令牌,这是否意味着该用户将在令牌过期后退出应用程序,并且必须再次登录 为什么我需要在SPA的情况下使用隐式流?为什么不使用授权代码流?因为我可以控制前端(SPA)和后端(RESTAPI)。例如,在SpringMVC架构的情况下,web应用程序授权代码流是可能的 谢谢, pchh 是的,如果令牌过期,您必须重新验证。通常,您在identi
oidc客户端
这样的库支持静默登录
,它可以为您做到这一点iframe
,但添加prompt=none
参数(可能还有id\u-token\u-hint
参数)。看见prompt=none
参数告诉/auth
端点,如果用户在OAuth2服务器上有一个打开的SSO会话,则发出一个或多个新令牌。否则,请求将失败。有一个单独的RFC用于/token
端点,该端点通常需要身份验证(客户端ID+客户端机密),并且您无法在浏览器中保护机密。因此,令牌端点不用于支持CORS头,因此无法使用XHR访问它。使用Auth代码流,您将获得一个代码作为重定向URL参数(?code=
),该参数将到达承载SPA的服务器(浏览器在重定向后将其发送到该服务器)。隐式流在重定向URL(#access_token=
)的哈希部分返回标记,该标记保留在浏览器中(不会发送到服务器),因此更安全我不会说如果访问令牌留在浏览器中会更安全。某些流的目的实际上是防止将令牌传递给浏览器。但是,对于单页应用程序,通常没有客户端的服务器端,因此您需要在浏览器中管理令牌。因此,为了支持授权代码流,javascript不能向授权端点发出http请求,获取重定向url,解析并获取代码,然后将其发送给SPA,然后SPA访问/token端点,因为它通常会这样做。我不确定我是否理解您的问题。如果你想有一个后端来交换代币代码并将代币发送到你的SPA,是的,你可以这样做,但我认为隐式流是为你创建的,你不需要做这些事情。哦,好的。有输入错误,我已在下面更正。因此,为了支持授权代码流,SPA的javascript不能向授权端点发出http请求,获取重定向url,解析并获取代码,然后将其发送到服务提供商或后端,然后服务提供商或后端像正常情况一样访问/token端点doThanks@mode777。1.因此,如果用户处于活动状态,那么令牌是否也会过期?i、 e.假设令牌的生命周期为10分钟,并且用户在所有10分钟内都处于活动状态,那么他必须在10分钟之前重新验证,这意味着库必须在10分钟之前跟踪并获取新令牌,这不是很奇怪吗2。我不能从javascript中进行HTTP调用并解析头并获取授权令牌吗OAuth 2.0承载令牌规范说最多60分钟的生存时间是可以的()。但是是的,你的代币最终会过期。正如@Ján Halaša和我所描述的,如果您仍然拥有SSO会话,那么一旦会话过期,您就可以在后台静默地获取令牌。我将尝试使用
oidc client
@mode777添加一个示例。续订是否依赖cookie?如果是这样,如果续订iframe中使用的idp站点托管在另一个域上,并且浏览器已禁用“第三方Cookie”@akn我认为第三方Cookie在这里不会有问题,那么它可能无法工作。是的,此处涉及cookies,但仅涉及第一方cookies。静默续订依赖于指向SSO提供程序登录页面的iframe。如果在Iframe的上下文中,用户仍然有一个具有有效会话的cookie,则可能会发生静默续订。因此,客户端应用程序上没有存储cookie,而只有SSO提供程序中存储cookie。