Google Cloud Storage JSON API Client for JavaScript を試す(2)アクセス制御関係
http://d.hatena.ne.jp/noazoh/20150115/1421315583 の続き。
Googleアカウントによる認証をせずとも、対象バケットへのアクセスが出来るようにしてみる。
コード
次に、サンプルコードを次のように変更する。
531行目〜
/** * Handle authorization. */ function handleAuthResult(authResult) { var authorizeButton = document.getElementById('authorize-button'); if (authResult && !authResult.error) { authorizeButton.style.visibility = 'hidden'; //initializeApi(); この行をコメントアウト filePicker.onchange = insertObject; } else { authorizeButton.style.visibility = ''; authorizeButton.onclick = handleAuthClick; } }
565行目〜
/** * Driver for sample application. */ $(window) .bind('load', function() { addSelectionSwitchingListeners(); initializeApi(); //この行を追加 handleClientLoad(); });
何をやっているかというと、cloud storage APIの初期化を、アカウント認証後に行っていたのを、ページがロードされた時に行うように変更した。
テスト
ブラウザを立ち上げ、Googleアカウントがログインしていない状態にしたうえで、サンプルを実行する。
まず、プルダウンから、たとえば"list Objects" を選択する。
まず、バケットの権限を何もいじらない状態(バケットを作成した直後の状態)で実行すると、結果はこうなる。
API Response { "code": 401, "data": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "message": "Login Required", "error": { "code": 401, "data": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "message": "Login Required" } }
次に、バケットに対して、AllUsers にREAD権限を与えてみる。
gsutil acl set public-read gs://バケット名
そして、同じくプルダウンから、"list Objects" を選択すると、バケット内のオブジェクトの一覧が取得できるようになる。
API Response { "kind": "storage#objects", "result": { "kind": "storage#objects" ... } }