Para enviar requisições usando o OSS SDK para iOS, configure credenciais de acesso. Os serviços da Alibaba Cloud utilizam credenciais de acesso para verificar sua identidade e permissões de acesso. É possível fornecer credenciais de diversas formas, de acordo com os requisitos de autenticação e autorização do seu cenário.
Pré-requisitos
Antes de configure as credenciais de acesso, instale o OSS SDK para iOS. Para mais informações, consulte Installation.
Inicializar o provedor de credenciais
Selecione um provedor de credenciais
O OSS oferece suporte a múltiplos métodos para inicializar um provedor de credenciais. Escolha o método mais adequado às necessidades de autenticação e autorização do seu cenário.
|
Método de inicialização |
Cenário |
Par de AccessKey ou token STS necessário previamente |
Credencial subjacente |
Validade da credencial |
Método de rotação ou atualize de credenciais |
|
Para aplicações que operam em ambientes seguros e precisam de acesso de longo prazo a serviços cloud sem rotação frequente de credenciais. |
Sim |
Chave de acesso |
Longo prazo |
Rotação manual |
|
|
Para aplicações que operam em ambientes não confiáveis, onde é necessário controlar o período de validade e as permissões das credenciais. |
Sim |
Token STS |
Temporária |
Personalizado |
|
|
Para aplicações que precisam obter credenciais de acesso a partir de um sistema externo. |
Não |
Token STS |
Temporária |
Atualização automática |
Método 1: Usar um par de AccessKey
Se sua aplicação requer acesso de longo prazo ao OSS, está implantada em um ambiente seguro e estável e não suporta rotação frequente de credenciais, utilize um par de AccessKey da sua conta da Alibaba Cloud ou de um usuário do Resource Access Management (RAM) para inicializar o provedor de credenciais. Um par de AccessKey é composto por um AccessKey ID e um AccessKey secret. No entanto, esse método exige a manutenção manual do par de AccessKey, o que aumenta os riscos de segurança e a complexidade operacional. Para saber como obter um par de AccessKey, consulte CreateAccessKey.
Código de exemplo
NSString *ak = @"<ALIBABA_CLOUD_ACCESS_KEY_ID>";
NSString *sk = @"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
id<OSSCredentialProvider> credentialProvider = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:ak secretKey:sk];
Método 2: Usar um token STS
Se sua aplicação precisa de acesso temporário ao OSS e você deseja implementar controle de acesso refinado com ajuste de permissões em tempo real para maior segurança e flexibilidade, utilize credenciais de identidade temporárias do Security Token Service (STS) para inicializar o provedor de credenciais. Essas credenciais incluem um AccessKey ID, um AccessKey secret e um token STS. No entanto, esse método exige a manutenção manual do token STS, o que aumenta os riscos de segurança e a complexidade operacional. Para saber como obter um token STS, consulte AssumeRole.
Especifique um par de AccessKey e um token STS no código para referenciar as credenciais. Os exemplos a seguir demonstram como atualize o token STS.
Manually update the STS token
NSString *ak = @"<ALIBABA_CLOUD_ACCESS_KEY_ID>";
NSString *sk = @"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
NSString *token = @"<ALIBABA_CLOUD_SECURITY_TOKEN>";
id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:ak
secretKeyId:sk
securityToken:token];
Automatically update the STS token
id<OSSCredentialProvider> credentialProvider = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * _Nullable{
// Obtain the AccessKey ID, AccessKey secret, STS token, and expiration time.
/* The following example shows how to obtain the AccessKey ID, AccessKey secret, STS token, and expiration time from an application server:
// Construct a request to access your application server.
NSURL * url = [NSURL URLWithString:@"http://localhost:8080/distribute-token.json"];
// Use the request to set the parameters required by your server.
NSURLRequest * request = [NSURLRequest requestWithURL:url];
OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];
NSURLSession * session = [NSURLSession sharedSession];
// Send the request.
NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
[tcs setError:error];
return;
}
[tcs setResult:data];
}];
[sessionTask resume];
// Block the thread and wait for the response.
[tcs.task waitUntilFinished];
// Parse the result.
if (tcs.task.error) {
NSLog(@"get token error: %@", tcs.task.error);
return nil;
} else {
// The returned data is in JSON format. Parse the data to obtain the fields of the token.
NSDictionary * object = [NSJSONSerialization JSONObjectWithData:tcs.task.result
options:kNilOptions
error:nil];
NSString *ak = [object objectForKey:@"AccessKeyId"];
NSString *sk = [object objectForKey:@"AccessKeySecret"];
NSString *token = [object objectForKey:@"SecurityToken"];
NSString *expiration = [object objectForKey:@"Expiration"];
OSSFederationToken * federationToken = [OSSFederationToken new];
federationToken.tAccessKey = ak;
federationToken.tSecretKey = sk;
federationToken.tToken = token;
federationToken.expirationTimeInGMTFormat = expiration;
NSLog(@"get token: %@", federationToken);
return federationToken;
}
*/
NSString *ak = @"<ALIBABA_CLOUD_ACCESS_KEY_ID>";
NSString *sk = @"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
NSString *token = @"<ALIBABA_CLOUD_SECURITY_TOKEN>";
NSString *expiration = @"<EXPIRATION>";
OSSFederationToken * federationToken = [OSSFederationToken new];
federationToken.tAccessKey = ak;
federationToken.tSecretKey = sk;
federationToken.tToken = token;
federationToken.expirationTimeInGMTFormat = expiration;
return federationToken;
}];
Método 3: Usar CredentialsURI
Se sua aplicação precisa obter e atualize automaticamente credenciais da Alibaba Cloud a partir de um sistema externo ou de uma configure personalizada para gerenciamento flexível de credenciais e acesso sem chaves, utilize CredentialsURI para inicializar o provedor de credenciais. Esse método usa um token STS como credencial subjacente. A ferramenta Credentials obtém o token STS a partir do URI fornecido para inicializar o cliente. Não é necessário fornecer um par de AccessKey ou um token STS, o que elimina os riscos associados à manutenção manual.
-
Para que a ferramenta Credentials analise e utilize corretamente o token STS, o URI deve retornar uma resposta que siga este protocolo:
Código de status da resposta: 200
-
Estrutura do corpo da resposta:
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }
-
Configure a credencial URI como credencial de acesso.
NSString *authServerUrl = @"<authServerUrl>"; id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:authServerUrl]; -
Se os dados estiverem criptografados, use o método a seguir para descriptografá-los.
NSString *authServerUrl = @"<authServerUrl>"; id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:authServerUrl responseDecoder:^NSData * _Nullable(NSData * _Nonnull data) { NSData *result = nil; // Decrypt the data. // result = ... return result; }];