我正在努力创建签名网址以将文件上传到Google存储空间。 首先,我使用JSON密钥获取私钥和clientId:
AuthCredentials.ServiceAccountAuthCredentials serviceAccountAuthCredentials = AuthCredentials.ServiceAccountAuthCredentials.createForJson(json_resource.getInputStream());
PrivateKey key = serviceAccountAuthCredentials.credentials().getPrivateKey();
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initSign(key);
之后,创建要签名的字符串:
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");
使用此网址我收到错误:
SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配。 检查您的Google密钥和签名方法.GET 1485340222074 / bucketName / fileName
答案 0 :(得分:2)
您好,请查看我方的以下工作代码。我觉得你缺少一些参数作为get或token:`
Writable templateImpl = t.make(bindings);
MetaClass metaClass = ((Closure) templateImpl).getMetaClass();
答案 1 :(得分:0)
我发现我必须在StringToSign中设置内容类型才能使PUT正常工作。在设置内容类型之前,我收到的错误消息与您相同。