使用STS服务临时授权
OSS可以通过阿里云STS服务,临时进行授权访问。使用STS时请按以下步骤进行:
aos_pool_t *p;
oss_request_options_t *options;
aos_status_t *s;
aos_table_t *headers;
aos_table_t *resp_headers;
char *bucket_name = "<您的bucket名字>";
char *object_name = "<您的object名字>";
aos_string_t bucket;
aos_string_t object;
char *data = "<object content>";
aos_list_t buffer;
aos_buf_t *content;
aos_pool_create(&p, NULL);
// init_oss_request_options using sts_token
/* 创建并用STS token初始化options */
options = oss_request_options_create(p);
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, "<您的Endpoint>");
aos_str_set(&options->config->access_key_id, "<您的临时AccessKeyId>");
aos_str_set(&options->config->access_key_secret, "<您的临时AccessKeySecret>");
aos_str_set(&options->config->sts_token, "<您的sts_token>");
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
/* 初始化参数 */
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
headers = aos_table_make(p, 0);
aos_list_init(&buffer);
content = aos_buf_pack(options->pool, data, strlen(data));
aos_list_add_tail(&content->node, &buffer);
/* 上传文件 */
s = oss_put_object_from_buffer_s(options, &bucket, &object, &buffer, headers, &resp_headers);
if (aos_status_is_ok(s)) {
printf("put object succeeded\n");
} else {
printf("put object failed\n");
}
aos_pool_destroy(p);
aos_pool_t *p;
oss_request_options_t *options;
aos_http_request_t *req;
char *url_str;
char *bucket_name = "<您的bucket名字>";
char *object_name = "<您的object名字>";
aos_string_t bucket;
aos_string_t object;
apr_time_t now;
int64_t expire_time;
int one_hour = 3600; /* 单位:秒*/
aos_pool_create(&p, NULL);
/* 创建并初始化options */
options = oss_request_options_create(p);
init_options(options);
/* 初始化参数 */
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
req = aos_http_request_create(p);
req->method = HTTP_GET;
now = apr_time_now(); //millisecond
expire_time = now / 1000000 + one_hour;
/* 生成签名url */
url_str = oss_gen_signed_url(options, &bucket, &object, expire_time, req);
printf("临时下载url:%s\n", url_str);
aos_pool_destroy(p);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用阿里云STS(Security Token Service)服务为OSS(Object Storage Service)提供临时授权访问时,您需要遵循一系列步骤来确保客户端能够安全且有效地与OSS交互。下面我将详细解释如何使用STS凭证构造签名请求以执行OSS操作,如上传文件。
获取STS临时凭证:
AccessKeyId
, AccessKeySecret
, 以及SecurityToken
。这些凭证具有有限的有效期,并赋予了特定的权限。初始化OSS请求选项:
aos_pool_t *p;
oss_request_options_t *options;
// 创建内存池
aos_pool_create(&p, NULL);
// 初始化请求选项结构体
options = oss_request_options_create(p);
配置STS凭证到请求选项:
options->access_key_id = "<Your AccessKeyId>";
options->access_key_secret = "<Your AccessKeySecret>";
options->security_token = "<Your SecurityToken>";
这里,您需要将<Your AccessKeyId>
, <Your AccessKeySecret>
, 和<Your SecurityToken>
替换为从STS服务获取的实际值。
设置其他请求参数: 根据您的具体需求,可能还需要设置其他参数,比如HTTP头部、超时时间等。
创建OSS客户端实例:
oss_client_t *client = oss_create_client(options);
构建请求并执行操作: 以上传文件为例,您需要准备数据缓冲区、定义bucket和object名称,然后调用上传接口。
char *data = "Your file content";
aos_list_t buffer;
aos_buf_t *content;
aos_list_init(&buffer);
content = aos_buf_pack(options->pool, data, strlen(data));
aos_list_add_tail(&content->node, &buffer);
aos_string_t bucket_name;
aos_str_set(&bucket_name, "<Your Bucket Name>");
aos_string_t object_name;
aos_str_set(&object_name, "<Your Object Key>");
s = oss_put_object_from_buffer(client, &bucket_name, &object_name, &buffer, NULL, NULL);
处理响应和错误: 检查s
的状态以确定操作是否成功,并根据需要处理响应头或错误信息。
清理资源: 在操作完成后,记得释放资源,包括关闭客户端连接和清理内存池。
oss_release_client(client);
aos_pool_destroy(p);
请确保在实际应用中替换所有的占位符(如<Your Bucket Name>
、<Your Object Key>
等)为实际的值,并正确处理可能出现的错误情况,以保证程序的健壮性。