有没有办法将客户端和服务器端的Google API身份验证结合起来?

时间:2016-07-14 20:29:07

标签: oauth google-api

目前我正在实现一个Ionic应用程序,前端位于移动设备上,后端位于服务器上。 (因此设备和服务器之间存在连接延迟)我的应用程序通过连接到Google API来使用Google服务(如Gmail,日历等)。

  1. 目前架构是:

    设备< ==>服务器< ==> Google API

    这是使用OAuth 2.0服务器端身份验证。它可以工作,但连接延迟太长,感觉就像回到我们有拨号上网的时候。

  2. 我尝试使用OAuth 2.0客户端身份验证,即:

    设备< ==> Google API

    速度更快但有2个问题:

    1. 即使Ionic将前端代码打包到应用程序中,我仍然担心“每个人都可以看到前端的所有内容”这一规则。 (没有找到证据证明或反对这一假设的证据)
    2. Google API OAuth 2.0仅向客户端身份验证发出流量,流量经常过期,我不希望用户一次又一次地授予权限。
  3. 所以,我想知道是否有可能做到以下几点:

    • 使用服务器端身份验证来存储密钥/凭证(我使用Django作为后端,即Python),前端从服务器获取密钥/凭据,并使用JavaScript代码继续使用Google服务。

1 个答案:

答案 0 :(得分:0)

我知道派对迟到了,但我现在正在经历这个。我认为有两种方法可以设置它,但两种方法都不完美。

  1. 使用服务器端流程来授权服务器或客户端上您需要的所有范围。获得令牌后,将其传递给您的客户端。缺点是客户端现在有一个令牌,可以访问超过需要的API。
  2. 为客户端和服务器创建单独的授权流程。这意味着用户有2个授权提示,这是不好的。这种方法的好处是你可以确保客户端的范围有限,但服务器仍然可以处理更大的任务(移动驱动器文件,发送电子邮件等)。
  3. 在我的情况下,客户端只需要对Contacts API的读取权限,而服务器需要完全的Drive访问权限。

    如果有人发现组合方法,只需要1个授权,但客户端和服务器具有单独的范围,那将是理想的情况。