如何使用app引擎中的oauth2令牌授权谷歌选择器

时间:2016-04-06 02:16:42

标签: google-app-engine oauth2 google-picker

我正在开发一个在登录时使用OAuth2的App Engine Java程序。换句话说,用户必须在使用该应用程序之前获得批准。我现在想要集成Google Picker功能,而无需在客户端上进行身份验证(再次请求权限)。

我所做的是传递一个对象(loginInfo是一个json对象),并将该标记作为属性。

虽然令牌在服务器端完全正常,但在客户端上我收到UnAuthorized 401错误。 的修改 我应该提一下,服务器端的范围包括Picker上Views的所有必要权限,以及我的Picker Api以及Drive API。

现在我的问题是,处理这种情况的最佳方法是什么?在客户端上发布authToken是否安全?如何才能实现此方案,以便用户不会批准两次仍然使用Picker?是否有比Picker更好的解决方案上传到云端硬盘,Picassa或其他Google服务?

1 个答案:

答案 0 :(得分:0)

首先,让我道歉,因为我忘了提到我正在使用GWT来编写应用程序。话虽如此,似乎错误来自使用GWT-Ajaxloader库;显然它必须以过时的方式呼叫api。所以我的解决方案是将请求硬编码到html中 因此

 <!--  The Following proves that picker works with oAuth2 -->
  <script type="text/javascript">
      // Use the API Loader script to load google.picker and gapi.auth.
      function onApiLoad() {
        gapi.load('picker');
      }
    </script>
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>

完成此操作后,我可以使用已加载的picker对象并放入setDeveloperKey()方法。现在一切都很好吃。还有一点需要注意...... 确保服务器上的AccessKey尚未过期。关于Java Api 这可以通过检查它何时到期来完成Credential.getExpiresInSeconds()我亲自给了自己一个小时

if(cred.getExpiresInSeconds() <= 3600){
   cred.refreshToken();}

这是对我有用的修复方法。