0

是否可以使用客户端和服务器端的 oauth2 身份验证,而不需要为每个单独的用户登录?

跨客户端身份页面似乎正是我想要的,但它没有描述如何为 Web 客户端和服务器项目实现这一点。 https://developers.google.com/accounts/docs/CrossClientAuth

具体来说,这就是我想要实现的目标:我有一个 Web 应用程序,它使用驱动器 API 创建文件和驱动器实时 API 用于协作编辑文档,所以我需要进行客户端身份验证。我还希望允许用户与其他用户公开共享文档的只读副本。我想通过在谷歌应用引擎中存储文档数据的快照来做到这一点,任何人都可以阅读,但只能由创建谷歌文档的用户编写。这表明我需要服务器端身份验证。但是有什么方法可以做到这一点,而无需用户登录一次以进行客户端访问,然后再次登录以进行服务器端访问?

这个问题似乎很相似:Authenticating G+ users on the server side, after client-side login 但接受的答案似乎建议简单地将用户 ID 存储在应用引擎上并检查客户端上的用户 ID 是否匹配。这似乎只需要知道文件创建者的用户 ID 即可覆盖应用引擎服务器上的文档,这是不安全的。

4

2 回答 2

2

您可以以安全的方式将服务器组件的访问令牌传递给您的前端,您无需在客户端再次授权。

于 2013-08-27T09:07:35.567 回答
1

这可能比你想象的要容易。我的应用程序非常相似,因为我从服务器应用程序中执行了一些操作,但大多数用户是直接从 Javascript 访问 Drive。

我这样做的方式是在服务器上进行初始授权,因为这可以让我更好地控制用户体验,并且我可以将 Google 授权与我自己的注册逻辑结合起来。这样做的结果是我最终在我的服务器数据库中获得了一条用户记录,以及一个存储的访问凭证。

一旦用户获得授权和身份验证,我就为 javascript 应用程序提供服务,然后该应用程序可以自由地自己请求访问令牌,而与服务器无关。Burcu 的回答是正确的,您可以将访问令牌传递给客户端,但由于客户端无论如何都需要处理令牌过期,我不认为这是一个巨大的胜利(尽管它可以加快初始加载)。

在识别方面,我将 google 用户 ID 存储在 http 会话中。如果客户端请求一些服务器的东西,它是告诉我用户是谁的会话(基于谷歌的私人会话 cookie)。因此无需将用户 ID 向下传递给客户端。

于 2013-08-30T12:48:18.270 回答