全部产品
阿里云办公

授权访问

更新时间:2018-07-25 10:38:33

使用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. }
本文导读目录