全部產品
Search
文件中心

Object Storage Service:授權訪問

更新時間:Aug 30, 2018

使用URL簽名授權訪問

通過生成簽名URL的形式提供給使用者一個臨時的訪問URL。在生成URL時,您可以指定URL過期的時間,從而限制使用者長時間訪問。

提示:

  • 以下場景的完整代碼請參考:GitHub

使用私有的下載連結

生成GetObject的簽名url樣本如下:

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. // get object
  20. signedURL, err := bucket.SignURL("ObjectName", oss.HTTPGet, 60)
  21. if err != nil {
  22. HandleError(err)
  23. }
  24. body, err := bucket.GetObjectWithURL(signedURL)
  25. if err != nil {
  26. HandleError(err)
  27. }
  28. // read content
  29. data, err := ioutil.ReadAll(body)
  30. body.Close()
  31. data = data // use data
  32. err = bucket.GetObjectToFileWithURL(signedURL, "localFile")
  33. if err != nil {
  34. HandleError(err)
  35. }
  36. }

提示:

  • 生成的URL可以直接通過瀏覽器訪問相關內容。

使用私有的上傳連結

如果您想允許使用者臨時進行其它操作(比如上傳,刪除檔案),可能需要簽名其它方法的URL,如下:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. // put object
  20. signedURL, err := bucket.SignURL("ObjectName", oss.HTTPPut, 60)
  21. if err != nil {
  22. HandleError(err)
  23. }
  24. var val = "花間一壺酒,獨酌無相親。 舉杯邀明月,對影成三人。"
  25. err = bucket.PutObjectWithURL(signedURL, strings.NewReader(val))
  26. if err != nil {
  27. HandleError(err)
  28. }
  29. // put object with option
  30. options := []oss.Option{
  31. oss.Meta("myprop", "mypropval"),
  32. oss.ContentType("image/tiff"),
  33. }
  34. signedURL, err = bucket.SignURL("ObjectName", oss.HTTPPut, 60, options...)
  35. if err != nil {
  36. HandleError(err)
  37. }
  38. err = bucket.PutObjectFromFileWithURL(signedURL, "localFile", options...)
  39. if err != nil {
  40. HandleError(err)
  41. }
  42. }

臨時憑證(STS)上傳和下載

介紹

OSS可以通過阿里雲STS服務,臨時進行授權訪問。阿里雲STS(Security Token Service)是為雲端運算使用者提供臨時存取權杖的Web服務。通過STS,您可以為第三方應用或聯邦使用者(使用者身份由您自己管理)頒發一個自訂時效和許可權的訪問憑證。STS更詳細的解釋請參考 STS介紹

使用STS憑證建立OssClient

使用者的client端拿到STS臨時憑證後,通過其中安全性權杖(SecurityToken)以及臨時存取金鑰(AccessKeyId, AccessKeySecret)生成Client。

通過下面代碼可以使用STS臨時憑證建立Client:

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. // Handle Error
  9. }
  10. func main() {
  11. client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret", oss.SecurityToken("StsToken"))
  12. if err != nil {
  13. HandleError(err)
  14. }
  15. bucket, err := client.Bucket("BucketName")
  16. if err != nil {
  17. HandleError(err)
  18. }
  19. err = bucket.PutObject("my-object", bytes.NewReader([]byte("MyObjectValue")))
  20. if err != nil {
  21. HandleError(err)
  22. }
  23. fmt.Printf("Completed\n")
  24. }