2017-11-21 23 views
0

Google Cloud Storageにファイルを送信する必要があるアプリケーションを開発しています。ユーザー確認なしにファイルをGCSに送信する最も良い方法

webappには、アップロードするファイルを選択するHTMLページがあります。

ユーザーにはGoogleアカウントがありません。

送信するファイルの量は5以下です。

私はGAEにファイルを送信したくないし、GAEはGCSに送信したくない。私は自分のユーザーが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情報(Googleのコンソール)を取得し、それのためにトークンベアラを生成します。私は "jsonアカウント情報"を読み、トークンを生成するpythonファイルを使用しました。

私requisitは、ファイルを送信するために、ユーザは、この義務は、私のアプリケーションからのもので、任意のGoogleアカウントの情報を確認する必要がないということです。 (ユーザーはGoogleアカウントを持っていません)、htmlページはGAEまたはGCEに送信せずにGCSに直接ファイルを送信するため、HTMLフォームまたはJavascriptを使用する必要があります。私はJavascriptを好む。 このアプリケーションのユーザーだけがアップロードできます(アプリケーションはデータベースとの認証を持っているため)、匿名ユーザーはそれを行うことができません。

私の質問は以下のとおりです。

  • このトークンの有効期限が切れますか?私はこのトークンを生成するためにserviceaccountを使用しました。
  • これを行うには、より良いAPI javascriptがありますか?
  • このセキュリティソリューションは優れていますか、別の方法を使用する必要がありますか?

答えて

1

信頼されていないエンドユーザーにリフレッシュやアクセストークンのいずれかを送信することは非常に危険です。アクセストークンのベアラは、数分後にアクセストークンが期限切れになるまで、関連付けられたアカウント(アクセストークンを生成するために使用されたスコープ内)として機能する完全な権限を持ちます。あなたはそれをしたくありません。

いくつかの選択肢があります。最も簡単な方法は、必要なアップロード要求を正確に作成し、サービスアカウントの秘密鍵を使用してその要求のURLに署名することです。署名されたURLは、数分間有効となり、1つのオブジェクトをアップロードするために使用できます。顧客に提供する前に、サーバー側でURLに署名する必要があります。署名付きURLのドキュメントは次のとおりです。https://cloud.google.com/storage/docs/access-control/signed-urls

+0

ありがとうございます。 「署名されたURL」について読みましたが、今使っています! GCSにファイルを送信して取得し、自分のgithubに入れるアプリケーションを作成しました。 ここにあります:https://github.com/charlesasilva61/gcs-java-signed-url – javaTry

関連する問題