Google cloud platform 在没有用户确认的情况下,将文件发送到地面军事系统的最佳方式

Google cloud platform 在没有用户确认的情况下,将文件发送到地面军事系统的最佳方式,google-cloud-platform,google-cloud-storage,Google Cloud Platform,Google Cloud Storage,我正在开发一个需要将文件发送到谷歌云存储的应用程序 webapp将有一个HTML页面,用户可以选择要上载的文件 用户没有Google帐户 要发送的文件数量为5或更少 我不想将文件发送到GAE和GAE发送到GCS。我想让我的用户直接上传到地面军事系统 我上传了以下代码: function sentStorage() { var file = document.getElementById("myFile").files[0]; url = 'https

我正在开发一个需要将文件发送到谷歌云存储的应用程序

webapp将有一个HTML页面,用户可以选择要上载的文件

用户没有Google帐户

要发送的文件数量为5或更少

我不想将文件发送到GAE和GAE发送到GCS。我想让我的用户直接上传到地面军事系统

我上传了以下代码:

function sentStorage() {
           var file =  document.getElementById("myFile").files[0];
           url = 'https://www.googleapis.com/upload/storage/v1/b/XXX/o?uploadType=resumable&name=' + file.name;
             xhr = new XMLHttpRequest();

           var token = 'ya29.XXXXXXXXXXXXXXX'; 
           xhr.open('POST', url);
           xhr.setRequestHeader('Content-Type', file.type);

           // resumable
           //url = 'https://www.googleapis.com/upload/storage/v1/b/XXXXXX/o?uploadType=resumable&name=' + file.name;
           //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
           //xhr.setRequestHeader('Content-Length', file.size);


           xhr.setRequestHeader('x-goog-project-id', 'XXXXXXXXXX');
           xhr.setRequestHeader('Authorization', 'Bearer ' + token);

           xhr.send(file);

           xhr.onreadystatechange = function () {
               if (xhr.readyState === 4) {
                   var response = JSON.parse(xhr.responseText);
                   if (xhr.status === 200) {
                       alert('codigo 200');
                   } else {
                     var message = 'Error: ' + response.error.message;
                     console.log(message);
                       alert(message);

                   }
               }
           };
       }
我在谷歌控制台上获得一个serviceaccount信息,并为它生成一个令牌承载器。我使用了一个python文件来读取json帐户信息并生成令牌

我的要求是,用户不需要确认发送文件的任何谷歌帐户信息,这项义务来自我的应用程序。用户没有Google帐户,html页面直接将文件发送到GCS,而不发送到GAE或GCE,因此,我需要使用html表单或Javascript。我更喜欢Javascript。 只有此应用程序的用户才能上载应用程序,因为应用程序具有与数据库的身份验证,因此,匿名用户无法执行此操作

我的问题是:

此令牌将过期吗?我使用serviceaccount生成此令牌。 有更好的api javascript来做吗? 这个安全解决方案更好,还是我应该使用不同的方法?
向不受信任的最终用户发送刷新或访问令牌是非常危险的。访问令牌的持有者拥有完全的权限,在用于生成它的作用域内充当关联帐户,直到访问令牌几分钟后过期。你不想那样做


有几个好的选择。最简单的方法是创建您想要的上传请求,然后使用服务帐户的私钥为该请求的URL签名。该签名URL将在几分钟内有效,然后可以用于上载单个对象。在将URL提供给客户之前,您需要在服务器端对其进行签名。以下是关于签名URL的文档:

非常感谢您的解释。我读到了关于签名的url,我现在正在使用它!!我构建了一个应用程序,可以向GCS发送和获取文件,并将其放入github。在这里: