我正在尝试使用以下命令将图像上传到 Google Cloud Storage 上的存储桶中JSON API https://cloud.google.com/storage/docs/json_api/,使用 Javascript 示例:API JavaScript 示例 https://cloud.google.com/storage/docs/json_api/v1/json-api-javascript-samples
我可以上传图片,但它要求我登录我的谷歌帐户。
该示例有一个授权按钮,据我所知,该按钮管理 OAuth 凭据。
function checkAuth() {
gapi.auth.authorize({
client_id: clientId,
scope: scopes,
immediate: true
}, handleAuthResult);
}
问题是:
我想在没有弹出屏幕的情况下进行身份验证,这意味着无需使用 Google 登录。因为我的客户不知道电子邮件或密码,所以我希望它能够自动完成。
我怎样才能实现这个目标?
Thanks!
- - - - - - - - - - - - - - -更新 - - - - - - - - - -
因此,根据布兰登的回答,我做了以下工作:
我已经创建了我的保单文件并按如下方式签署:
var http = require('http');
var fs = require('fs');
var crypto = require('crypto');
var express = require('express');
var app = express();
var p12ToPem = require("./node_modules/p12-to-pem/p12ToPem.js");
var p12File = fs.readFileSync("./KEY.p12");
var pemKey = p12ToPem(p12File, "notasecret");
var policyJson={"expiration": "2050-06-16T11:11:11Z",
"conditions": [["starts-with", "$key", "" ],
{"acl": "bucket-owner-read" },
{"bucket": "my-bucket'name"},
{"success_action_redirect":"http://www.example.com/success_notification.html" },
["eq", "$Content-Type", "image/jpeg" ],
["content-length-range", 0, 1000000]
]
};
var policyJson64 = new Buffer(''+policyJson).toString('base64');
var sign = crypto.createSign('RSA-SHA256');
sign.update(policyJson64);
var sig = sign.sign(pemKey, 'base64')
console.log("policyJson64:"+policyJson64);
console.log("sig:"+sig);
我的帖子表格如下:
<form action="http://my-bucket-name.storage.googleapis.com" method="post" enctype="multipart/form-data">
<input type="text" name="key" value="">
<input type="hidden" name="bucket" value="my-bucket-name">
<input type="hidden" name="Content-Type" value="image/jpeg">
<input type="hidden" name="GoogleAccessId" value="884257827820-so77htet9tafrcjjp83m7api9lh12qsn@developer.gserviceaccount.com">
<input type="hidden" name="acl" value="bucket-owner-read">
<input type="hidden" name="success_action_redirect" value="http://www.example.com/success_notification.html">
<input type="hidden" name="policy" value="DONT KNOW WHAT TO PUT HERE">
<input type="hidden" name="signature" value="NEITHER HERE">
<input name="file" type="file">
<input type="submit" value="Upload">
无论 javascrypt 中获得的组合如何,我似乎都无法弄清楚策略中的内容和签名中的内容,是的!我已阅读 API,但不清楚这 2 个输入中的内容。
我也尝试将 PolicyJson64 和 sig 的值放入策略输入中。我也尝试过在签名输入中输入 sig 和 pemKey 的值。
我收到此错误:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
</Message>
<StringToSign>
a/vDHoeJ1jIZibjgLnS/ZfMftmyz8IaISJiVt1b2wDNbDjnSR+0HyEDW9/Lew7ufMjU9xdtX/Uld06IJbeYz3OWGHnH4osJNS614RoDVd7lq2qft+bSCqYPtkagJiUWs9SNOPvuQzISthqloPQOwJ1LLXHYmV52c73OpexAnSR4=
</StringToSign>
</Error>
我应该放什么?
- - - 更新 - - -
请不要复制粘贴没有帮助的文档。
添加赏金