Oauth 2.0 OpenId连接隐式流,如何维护会话

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

我正在构建一个Angular SPA应用程序,并将Okta用作Idp。因为这是一个SPA,所以我想我需要使用隐式流。我这里有两个问题-

  • 由于在隐式流中没有发布刷新令牌,这是否意味着该用户将在令牌过期后退出应用程序,并且必须再次登录

  • 为什么我需要在SPA的情况下使用隐式流?为什么不使用授权代码流?因为我可以控制前端(SPA)和后端(RESTAPI)。例如,在SpringMVC架构的情况下,web应用程序授权代码流是可能的

  • 谢谢, pchh

  • 是的,如果令牌过期,您必须重新验证。通常,您在identity providers站点上仍然有一个有效的会话,因此您可以使用iframe进行“静默”登录。像
    oidc客户端
    这样的库支持
    静默登录
    ,它可以为您做到这一点

  • 当需要从javascript应用程序访问访问令牌时,需要使用隐式(或混合)流。使用授权代码流,您的javascript应用程序无法获得访问令牌,因此如果您的API需要访问令牌进行授权,您将发送什么

  • 如果您的身份验证服务器支持OpenID Connect(OAuth2扩展)和单点登录(SSO)功能,要在旧令牌过期之前获取新令牌,请使用带有用于身份验证的URL的
    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。