使用临时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);
}]