0

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

我所做的是将令牌作为属性传递一个对象(loginInfo 是一个 json 对象)。

虽然令牌在服务器端工作得非常好,但在客户端我收到 UnAuthorized 401 错误。 编辑 我应该提到,服务器端的范围包括 Picker 上视图的所有必要权限,并且启用了我的 Picker Api 以及 Drive API。

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

4

1 回答 1

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>

完成此操作后,我就可以使用已加载的选取器对象并将其放入 setDeveloperKey() 方法中。现在一切都是肉汁。还有一个警告......确保服务器上的 AccessKey 没有过期。在 Java Api 上,这可以通过检查何时过期来完成 Credential.getExpiresInSeconds() 我个人给了自己一个小时

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

这是对我有用的修复程序。

于 2016-04-07T00:26:22.567 回答