ali_sts.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package config
  2. import (
  3. openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  4. stsClient "github.com/alibabacloud-go/sts-20150401/v2/client"
  5. stsService "github.com/alibabacloud-go/tea-utils/v2/service"
  6. )
  7. type OssSts struct {
  8. AccessKeyId string `mapstructure:"ACCESS_KEY_ID" json:"ACCESS_KEY_ID" yaml:"ACCESS_KEY_ID"`
  9. AccessKeySecret string `mapstructure:"ACCESS_KEY_SECRET" json:"ACCESS_KEY_SECRET" yaml:"ACCESS_KEY_SECRET"`
  10. BucketName string `mapstructure:"BUCKET_NAME" json:"BUCKET_NAME" yaml:"BUCKET_NAME"`
  11. BucketUrl string `mapstructure:"BUCKET_URL" json:"BUCKET_URL" yaml:"BUCKET_URL"`
  12. BasePath string `mapstructure:"BASE_PATH" json:"BASE_PATH" yaml:"BASE_PATH"`
  13. StsEndpoint string `mapstructure:"STS_ENDPOINT" json:"STS_ENDPOINT" yaml:"STS_ENDPOINT"`
  14. StsDurationSeconds int64 `mapstructure:"STS_DURATION_SECONDS" json:"STS_DURATION_SECONDS" yaml:"STS_DURATION_SECONDS"` // 仅支持15分钟:900 / 60分钟:3600
  15. StsRoleSessionName string `mapstructure:"STS_ROLE_SESSION_NAME" json:"STS_ROLE_SESSION_NAME" yaml:"STS_ROLE_SESSION_NAME"`
  16. StsRoleArn string `mapstructure:"STS_ROLE_ARN" json:"STS_ROLE_ARN" yaml:"STS_ROLE_ARN"`
  17. StsRegion string `mapstructure:"STS_REGION" json:"STS_REGION" yaml:"STS_REGION"`
  18. }
  19. var stsAliEngine *StsAliOss
  20. func StsAliEngin() *StsAliOss {
  21. if stsAliEngine == nil {
  22. configSts := &openapi.Config{
  23. AccessKeyId: &EnvConf().StsOss.AccessKeyId,
  24. AccessKeySecret: &EnvConf().StsOss.AccessKeySecret,
  25. Endpoint: &EnvConf().StsOss.StsEndpoint,
  26. }
  27. // docs https://api.alibabacloud.com/product/Sts
  28. stsCli, err := stsClient.NewClient(configSts)
  29. if err != nil {
  30. panic(err)
  31. }
  32. stsAliEngine = &StsAliOss{
  33. stsCli,
  34. &EnvConf().StsOss.StsRoleArn,
  35. &EnvConf().StsOss.StsDurationSeconds,
  36. EnvConf().StsOss.BucketName,
  37. EnvConf().StsOss.BucketUrl,
  38. EnvConf().StsOss.BasePath}
  39. }
  40. return stsAliEngine
  41. }
  42. type StsAliOss struct {
  43. stsClient *stsClient.Client
  44. roleArn *string
  45. durationSeconds *int64
  46. bucketName string
  47. bucketUrl string // 访问地址
  48. basePath string //上传路径
  49. }
  50. // 阿里STS授权上传
  51. func (s *StsAliOss) AliSTS(roleName string) (*stsClient.AssumeRoleResponse, error) {
  52. assumeRoleRequest := &stsClient.AssumeRoleRequest{
  53. DurationSeconds: s.durationSeconds,
  54. RoleArn: s.roleArn,
  55. RoleSessionName: &roleName,
  56. }
  57. runtime := &stsService.RuntimeOptions{}
  58. return s.stsClient.AssumeRoleWithOptions(assumeRoleRequest, runtime)
  59. }