Google Storageにファイルをアップロードするための署名付きURLの作成が苦労しています。署名する文字列を作成し、その後Google Storageにオブジェクトを配置する署名付きURLを作成する
AuthCredentials.ServiceAccountAuthCredentials serviceAccountAuthCredentials = AuthCredentials.ServiceAccountAuthCredentials.createForJson(json_resource.getInputStream());
PrivateKey key = serviceAccountAuthCredentials.credentials().getPrivateKey();
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initSign(key);
を:: まず、私はキーJSONを使用して、秘密鍵を取得し、CLIENTIDい
String upload_uri = "PUT\n\n" + expiration +
"\n/" + bucketName + "/" + folderPath + "/" + fileName;
そして、署名文字列:
signer.update(stringToSign.getBytes("UTF-8"));
byte[] rawSignature = signer.sign();
String signature = new String(Base64.encodeBase64(rawSignature, false), "UTF-8");
そして構成符号付き文字列を使用するURL:
final String clientId = serviceAccountAuthCredentials.account();
String url = "http://storage.googleapis.com/" +
bucketName + "/" + folderPath + "/" + fileName +
"?GoogleAccessId=" + clientId +
"&Expires=" + expiration +
"&Signature=" + URLEncoder.encode(signature, "UTF-8");
0このURLを使用
私はエラーを取得しています:私の側から以下の作業コードをチェックし
SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.GET 1485340222074 /bucketName/fileName
stringToSignとgsutilのような標準的な例を同じURLで比較できますか?初心者の方は、PUTの後に\ nがないと思います(メソッド、md5、およびコンテンツタイプに1つが必要です)。 –
提案ありがとう、@TravisHobrla。私はそれを試した - うまくいきませんでした。 contentTypeを追加しようとしました - どちらもうまくいきませんでした。 – nkat
StringToSignが[正しい形式](https://cloud.google.com/storage/docs/access-control/signed-urls#string-components)に従っていること、有効期限がUnix Epochで正しく計算されていること、 [guide](https://cloud.google.com/storage/docs/access-control/create-signed-urls-program)に従って署名していることを確認してください。また、URLを使用するクライアントが、正しいヘッダー、具体的にはコンテンツタイプを設定していることを確認してください。 – Jordan