最先进的会话管理与OpenID和OAuth2的web应用程序



我正在使用应用程序引擎(Java), OpenId(用于Google登录等)和OAuth2(用于Facebook登录)实现我的web应用程序的身份验证部分。重要的需求包括"保持签名"和每个用户对数据存储的安全访问。

在我的理解中,为了实现"keep me signed"功能,我需要一个cookie来存储在服务器端(App Engine)生成的共享秘密。此外,为了确保对数据存储的访问安全,每个REST API调用都需要一个额外的参数,即共享密钥,以便在每次调用API时识别用户。这种类型的会话管理仍然主导着现代web应用程序的开发吗?一个更普遍的问题是:会话管理在朝着无状态方向发展的REST中是否过时?我可能误解了几个重要的概念。感谢您的指导和相关资源的提示。

在谈论OAuth时,还有另一种方式来看待keep-me-sign -in特性。

当一个应用程序使用OAuth,当用户验证和授权-应用程序得到一个Access token和一个Refresh token.这是基本的OAuth工作流程。

现在,应用程序可以通过在HTTP调用中提供Access令牌来代表用户调用REST API。访问令牌的有效期通常很短,一般为60分钟。因此,您的应用程序可以使用该令牌在60分钟内进行身份验证调用-这足以让您在60分钟内保持签名。

之后发生了什么?

每个OAuth服务提供商,如Facebook, Google等,将提供令牌交换端点-另一个REST API。您可以将刷新令牌交换为刷新令牌+访问令牌对。现在,无论何时你使用应用程序,如果访问令牌已经过期,只需点击令牌交换端点并获得新的访问令牌。

刷新令牌将不会过期,直到用户明确登录到服务提供商的网站并撤销对您的应用程序的权限。

相关内容

最新更新