是否可以使用客户端和服务器端的oauth2身份验证,而不需要分别进行用户登录?
跨客户端标识页面似乎正是我想要的,但它并没有描述如何在web客户端和服务器项目中实现这一点。https://developers.google.com/accounts/docs/CrossClientAuth
具体来说,这是我想要实现的目标:我有一个web应用程序,它使用drive api创建文件,drive realtime api用于协同编辑文档,因此我需要进行客户端身份验证。我还希望允许用户与其他用户公开共享文档的只读副本。我想通过在google应用程序引擎中存储文档数据的快照来实现这一点,任何人都可以读取,但只能由创建google文档的用户写入。这表明我需要服务器端身份验证。但是,有什么方法可以做到这一点,而不需要用户登录一次进行客户端访问,然后再登录一次进行服务器端访问呢?
这个问题看起来很相似:Authenticating G+ users on the server side, after client-side login,但公认的答案似乎建议简单地将用户id存储在应用程序引擎上,并检查客户端的用户id是否匹配。这似乎只需要知道文件创建者的用户id就可以覆盖应用程序引擎服务器上的文档,这是不安全的。
发布于 2013-08-27 17:07:36
您可以将服务器组件的访问令牌以一种安全的方式传递给您的前端,您不需要在客户端再次授权。
发布于 2013-08-30 20:48:18
这可能比你想象的要容易。我的应用程序非常类似,因为我在服务器应用程序上做了一些事情,但主要是用户直接从Javascript访问Drive。
我这样做的方式是在服务器上进行初始授权,因为这让我可以更好地控制用户体验,并且我可以将Google授权与我自己的注册逻辑结合起来。这样做的结果是,我的服务器数据库中有一个用户记录和一个存储的访问凭证。
一旦用户被授权和认证,我就为javascript应用程序提供服务,然后它就可以独立于服务器自由地请求访问令牌。Burcu的答案是正确的,您可以将访问令牌传递给客户端,但由于客户端无论如何都需要处理令牌过期问题,我不认为这是一个重大的胜利(尽管它可以加快初始加载)。
在标识方面,我将google用户Id存储在http会话中。如果客户端请求某些服务器内容,它就会告诉我用户是谁(基于Google的私有会话cookie)。因此,不需要将用户Id向下传递到客户端。
https://stackoverflow.com/questions/18455204
复制相似问题