我正嘗試創建一個簽名的URL,以便使用Go中編寫的App Engine應用程序從Google雲端存儲中下載文件。在我使用的App Engine中有一種漂亮的簽名方法,它[理論上]允許我避免將私鑰放入我的應用中。但是,這些網址似乎不起作用:我總是收到403「SignatureDoesNotMatch」錯誤。有任何想法嗎?在App Engine中創建簽名URL時遇到問題
下面的代碼:
func createDownloadURL(c context.Context, resource string, validUntil time.Time, bucket string) (string, error) {
serviceAccount, err := appengine.ServiceAccount(c)
if err != nil {
return "", err
}
// Build up the string to sign.
validUntilString := strconv.FormatInt(validUntil.Unix(), 10)
toSign := []string{
"GET", // http verb (required)
"", // content MD5 hash (optional)
"", // content type (optional)
validUntilString, // expiration (required)
resource, // resource (required)
}
// Sign it.
_, signedBytes, err := appengine.SignBytes(c, []byte(strings.Join(toSign, "\n")))
if err != nil {
return "", err
}
signedString := base64.StdEncoding.EncodeToString(signedBytes)
// Build and return the URL.
arguments := url.Values{
"GoogleAccessId": {serviceAccount},
"Expires": {validUntilString},
"Signature": {signedString},
}
return fmt.Sprintf("https://storage.googleapis.com/%s/%s?%s", bucket, resource, arguments.Encode()), nil
}
感謝您的建議。它似乎沒有幫助。 –