OpenId Connect Implicit流程,如何维护会话

时间:2018-01-17 12:05:42

标签: oauth-2.0 single-sign-on openid-connect okta okta-api

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

  1. 由于在Implicit流程中没有发出刷新令牌,这是否意味着在令牌过期后用户将从应用程序注销并且他必须再次登录?

  2. 为什么我需要在SPA的情况下使用隐式流程?为什么不授权代码流?因为我可以控制前端(SPA)和后端(REST API)。例如,对于Web应用程序的Spring MVC架构,可以使用授权代码流程。

  3. 谢谢, pchh

2 个答案:

答案 0 :(得分:1)

  1. 是的,如果令牌已过期,则必须重新进行身份验证。通常,您在身份提供商网站上仍然有一个有效的会话,因此您可以使用iframe进行“静默”登录。像oidc-client这样的图书馆支持silent login,可以为您执行此操作。

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

答案 1 :(得分:1)

  1. 如果您的auth服务器支持OpenID Connect(OAuth2扩展)和单点登录(SSO)功能,要在旧版本到期之前获取新令牌,请使用带有您使用的URL的iframe用于身份验证,但添加prompt=none参数(可能还有id_token_hint参数)。见OpenId Connect RFC。如果用户在您的OAuth2服务器上有一个开放的SSO会话,则prompt=none参数会告知/auth端点发出新令牌。如果不是,请求将失败。 session management有一个单独的RFC。

  2. 授权代码流要求您访问/token端点,这通常需要身份验证(客户端ID +客户端密钥),并且您无法在浏览器中保密。因此,令牌端点不支持使用CORS头,因此您无法使用XHR访问它。使用Auth代码流,您可以获得一个代码作为重定向URL参数(?code=),该参数可以访问托管SPA的服务器(浏览器在重定向后将其发送到那里)。隐式流返回重定向URL(#access_token=)的哈希部分中的标记,该标记位于浏览器中(不会发送到服务器),因此更安全。