使用URL簽名授權訪問
通過生成簽名URL的形式提供給使用者一個臨時的訪問URL。在生成URL時,您可以指定URL過期的時間,從而限制使用者長時間訪問。
提示:
- 以下場景的完整代碼請參考:GitHub
使用私有的下載連結
生成GetObject的簽名url樣本如下:
package main
import (
"fmt"
"io/ioutil"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
// get object
signedURL, err := bucket.SignURL("ObjectName", oss.HTTPGet, 60)
if err != nil {
HandleError(err)
}
body, err := bucket.GetObjectWithURL(signedURL)
if err != nil {
HandleError(err)
}
// read content
data, err := ioutil.ReadAll(body)
body.Close()
data = data // use data
err = bucket.GetObjectToFileWithURL(signedURL, "localFile")
if err != nil {
HandleError(err)
}
}
提示:
- 生成的URL可以直接通過瀏覽器訪問相關內容。
使用私有的上傳連結
如果您想允許使用者臨時進行其它操作(比如上傳,刪除檔案),可能需要簽名其它方法的URL,如下:
package main
import (
"fmt"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
// put object
signedURL, err := bucket.SignURL("ObjectName", oss.HTTPPut, 60)
if err != nil {
HandleError(err)
}
var val = "花間一壺酒,獨酌無相親。 舉杯邀明月,對影成三人。"
err = bucket.PutObjectWithURL(signedURL, strings.NewReader(val))
if err != nil {
HandleError(err)
}
// put object with option
options := []oss.Option{
oss.Meta("myprop", "mypropval"),
oss.ContentType("image/tiff"),
}
signedURL, err = bucket.SignURL("ObjectName", oss.HTTPPut, 60, options...)
if err != nil {
HandleError(err)
}
err = bucket.PutObjectFromFileWithURL(signedURL, "localFile", options...)
if err != nil {
HandleError(err)
}
}
臨時憑證(STS)上傳和下載
介紹
OSS可以通過阿里雲STS服務,臨時進行授權訪問。阿里雲STS(Security Token Service)是為雲端運算使用者提供臨時存取權杖的Web服務。通過STS,您可以為第三方應用或聯邦使用者(使用者身份由您自己管理)頒發一個自訂時效和許可權的訪問憑證。STS更詳細的解釋請參考 STS介紹。
使用STS憑證建立OssClient
使用者的client端拿到STS臨時憑證後,通過其中安全性權杖(SecurityToken)以及臨時存取金鑰(AccessKeyId, AccessKeySecret)生成Client。
通過下面代碼可以使用STS臨時憑證建立Client:
package main
import (
"bytes"
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
// Handle Error
}
func main() {
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret", oss.SecurityToken("StsToken"))
if err != nil {
HandleError(err)
}
bucket, err := client.Bucket("BucketName")
if err != nil {
HandleError(err)
}
err = bucket.PutObject("my-object", bytes.NewReader([]byte("MyObjectValue")))
if err != nil {
HandleError(err)
}
fmt.Printf("Completed\n")
}