2

我正在使用 App Engine (Java)、OpenId(用于 Google 登录等)和 OAuth2(用于 Facebook 登录)来实现我的 Web 应用程序的身份验证部分。重要要求包括“让我保持签名”和每个用户对数据存储的安全访问。

据我了解,要实现“保持签名”功能,我需要一个 cookie 来存储在服务器端(App Engine)生成的共享密钥。此外,为了保护对数据存储的访问,每个 REST API 调用都需要一个额外的参数,即共享密钥,以在每次调用 API 时识别用户。这种会话管理是否仍然主导着现代 Web 应用程序的开发?一个更普遍的问题是:在朝着无状态方向发展的 REST 的存在下,会话管理是否已经过时?我可能会误解这里的几个重要概念。感谢您对相关资源的指导和指点。

4

1 回答 1

4

在谈论 OAuth 时,还有另一种方式来看待 keep-me-signed-in 功能。

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

现在,应用程序可以通过向 HTTP 调用提供访问令牌来代表用户调用 REST API。访问令牌通常是短暂的,通常为 60 分钟。因此,您的应用可以使用该令牌进行 60 分钟的经过身份验证的调用 - 这足以让您在 60 分钟内对其进行签名。

之后会发生什么?

每个 OAuth 服务提供商,如 Facebook、Google 等,都将提供一个令牌交换端点——另一个 REST API。您可以将刷新令牌交换为刷新令牌 + 访问令牌对。现在再一次,每当您使用应用程序并且访问令牌已过期时,只需点击令牌交换端点并获取新的访问令牌。

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

于 2013-04-25T17:11:34.517 回答