使用临时URL进行授权访问
临时授权访问是指通过访问密钥、请求方法类型、请求参数等信息生成一个临时访问权限的URL,这个URL中会包含鉴权信息,您可以使用该URL进行访问OBS服务进行特定操作。在生成URL时,您需要指定URL的有效期。所有继承OBSBaseRequest的子类都能使用临时鉴权访问。
临时授权访问支持的操作以及相关信息见下表:
操作名 | OBS iOS SDK类名 |
|---|---|
创建桶 | OBSCreateBucketRequest |
获取桶列表 | OBSListBucketsRequest |
删除桶 | OBSDeleteBucketRequest |
列举桶内对象 | OBSListObjectsRequest |
列举桶内多版本对象 | OBSListObjectsVersionsRequest |
列举分段上传任务 | OBSListMultipartUploadsRequest |
获取桶元数据 | OBSGetBucketMetaDataRequest |
获取桶区域位置 | OBSGetBucketMetaDataRequest |
获取桶存量信息 | OBSGetBucketStorageInfoRequest |
设置桶配额 | OBSSetBucketQuotaRequest |
获取桶配额 | OBSGetBucketQuotaRequest |
设置桶ACL | OBSSetBucketACLWithCannedACLRequest、OBSSetBucketACLWithPolicyRequest |
获取桶ACL | OBSGetBucketACLRequest |
开启/关闭桶日志 | OBSSetBucketLoggingRequest |
查看桶日志 | OBSGetBucketLoggingRequest |
设置桶策略 | OBSSetBucketPolicyRequest、OBSSetBucketPolicyWithStringRequest |
查看桶策略 | OBSGetBucketPolicyRequest |
删除桶策略 | OBSDeleteBucketPolicyRequest |
设置生命周期规则 | OBSSetBucketLifecycleRequest |
查看生命周期规则 | OBSGetBucketLifecycleRequest |
删除生命周期规则 | OBSDeleteBucketLifecycleRequest |
设置托管配置 | OBSSetBucketWebsiteRequest |
查看托管配置 | OBSGetBucketWebsiteRequest |
清除托管配置 | OBSDeleteBucketWebsiteRequest |
设置桶多版本状态 | OBSSetBucketVersioningRequest |
查看桶多版本状态 | OBSGetBucketVersioningRequest |
设置跨域规则 | OBSSetBucketCORSRequest |
查看跨域规则 | OBSGetBucketCORSRequest |
删除跨域规则 | OBSDeleteBucketCORSRequest |
OPTIONS桶 | OBSOptionsBucketRequest |
设置桶标签 | OBSSetBucketTaggingRequest |
查看桶标签 | OBSGetBucketTaggingRequest |
删除桶标签 | OBSDeleteBucketTaggingRequest |
上传对象 | OBSPutObjectWithDataRequest、OBSPutObjectWithFileRequest |
追上上传 | OBSAppendObjectWithFileRequest |
下载对象 | OBSGetObjectToDataRequest |
复制对象 | OBSCopyObjectRequest |
删除对象 | OBSDeleteObjectRequest |
批量删除对象 | OBSDeleteObjectsRequest |
获取对象属性 | OBSGetObjectMetaDataRequest |
设置对象ACL | OBSSetObjectACLRequest |
查看对象ACL | OBSGetObjectACLRequest |
初始化分段上传任务 | OBSInitiateMultipartUploadRequest |
上传段 | OBSUploadPartWithDataRequest |
复制段 | OBSCopyPartRequest |
列举已上传的段 | OBSListPartsRequest |
合并段 | OBSCompleteMultipartUploadRequest |
取消分段上传任务 | OBSAbortMultipartUploadRequest |
OPTIONS对象 | OBSOptionsObjectRequest |
恢复归档存储对象 | OBSRestoreObjectRequest |

您可以通过createV2PreSignedURL生成授权访问的临时URL。以下代码展示了如何生成常用操作的URL:
列举对象
static OBSClient *client;
NSString *endPoint = @"your-endpoint";
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。
// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
char* ak_env = getenv("AccessKeyID");
char* sk_env = getenv("SecretAccessKey");
NSString *AK = [NSString stringWithUTF8String:ak_env];
NSString *SK = [NSString stringWithUTF8String:sk_env];
// 初始化身份验证
OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK];
//初始化服务配置
OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider];
// 初始化client
client = [[OBSClient alloc] initWithConfiguration:conf];
OBSListObjectsRequest *request = [[OBSListObjectsRequest alloc] initWithBucketName:@"bucketname"];
// V2生成授权访问url
[client createV2PreSignedURL:request expireAfter:3600 completionHandler:^(NSString *urlString, NSString *httpVerb, NSDictionary *signedHeaders) {
NSLog(@"%@",urlString);
}] 获取对象
static OBSClient *client;
NSString *endPoint = @"your-endpoint";
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。
// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
char* ak_env = getenv("AccessKeyID");
char* sk_env = getenv("SecretAccessKey");
NSString *AK = [NSString stringWithUTF8String:ak_env];
NSString *SK = [NSString stringWithUTF8String:sk_env];
// 初始化身份验证
OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK];
//初始化服务配置
OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider];
// 初始化client
client = [[OBSClient alloc] initWithConfiguration:conf];
OBSGetObjectToDataRequest *request = [[OBSGetObjectToDataRequest alloc] initWithBucketName:@"bucketname" objectKey:@"objectkey"];
// V2生成授权访问url
[client createV2PreSignedURL:request expireAfter:3600 completionHandler:^(NSString *urlString, NSString *httpVerb, NSDictionary *signedHeaders) {
NSLog(@"%@",urlString);
}] 
