Open ID Connect会话管理访问/刷新令牌与会话iFrame

时间:2019-04-11 19:25:37

标签: session oauth-2.0 openid openid-connect

我们有一个网络应用程序,允许用户使用任何Open ID提供程序(例如Okta,Google,Facebook等)登录该应用程序。我们要实施正确的Open ID Connect规定的方法/工作流程,以保持用户登录到该站点。

现有实现查看访问令牌的到期时间,然后如果接近到期,则使用刷新令牌来获取新的访问令牌以保持用户登录。我觉得这是错误的。当用户登录到Web应用程序时,身份令牌用于使用授权码工作流程对用户的身份进行身份验证。访问令牌和刷新令牌存储在服务器端。定期使用刷新令牌来获取新的访问令牌,以使用户保持登录到站点的状态。我认为这是安全隐患,因为-

想象一下,如果用户在浏览器中登录到其OP帐户。他打开Sky并直接登录MP,因为他已经登录MP。然后,他在一个单独的选项卡中,退出他的OP帐户。在这种刷新令牌/访问令牌机制的基础上,他将继续登录MP数天!这不是安全隐患吗?

如果感觉正确的方法是按照OIDC此处规定的那样使用通过iframe使用会话管理- https://openid.net/specs/openid-connect-session-1_0.html

有关更多上下文,当用户登录我们的WebApp时,我们将从OP的UserInfo端点中提取数据以在WebApp中创建配置文件,并根据从OP的UserInfo端点发送来的数据在我们的应用程序中设置权限/角色。我们将继续定期进行此操作。为此,我觉得使用访问令牌(并使用刷新令牌来获取新的访问令牌)来访问UserInfo API是正确的,因为它符合OAuth 2.0的使用访问令牌保护/授权API /资源端点的概念。

我想知道这是否是管理支持Open ID Connect时应该如何登录用户的正确方法。

1 个答案:

答案 0 :(得分:1)

我认为第一个问题是您是否要绑定OpenID Connect提供程序单一登录会话的生存期与应用程序会话。您只想使用他们的OpenID Connect服务对用户进行身份验证。如果我退出Google,我希望退出GMail,但不会退出使用Google进行身份验证的第三方应用程序。您是否还想实施“单一注销”?

但是,如果我想在注销OpenID Connect提供程序时注销,则可以实施OpenID Connect Session management。使用iframes和cookie时需要注意一件事-浏览器可以选择“阻止第三方cookie”(Chrome称之为),默认情况下它处于关闭状态,但据我所知知道,它在打开时会禁用SSO功能。

我不确定您为什么定期请求userinfo端点。如果您只想检查访问令牌是否仍然有效,则也可以使用token introspection endpoint

出于安全方面的考虑,建议您阅读OAuth 2.0 for Browser-Based Apps RFC。建议使用带有PKCE的auth代码流而不是隐式流。通过隐式流,重定向URL中传输的访问令牌将保留在网络和浏览器缓存中,并且攻击者可以立即使用它们。带有PKCE的身份验证代码需要code_verifier(一次性密码)才能交换令牌。因此,我将首先检查提供程序如何与您选择的配置一起使用,以及是否支持该配置。