Pour envoyer des requêtes avec le SDK OSS pour iOS, vous devez configurer des identifiants d'accès. Les services Alibaba Cloud utilisent ces identifiants pour vérifier votre identité et vos autorisations d'accès. Vous pouvez fournir ces identifiants de différentes manières selon vos exigences en matière d'authentification et d'autorisation.
Prérequis
Avant de configurer les identifiants d'accès, installez le SDK OSS pour iOS. Pour plus d'informations, consultez la rubrique Installation.
Initialiser le fournisseur d'identifiants
Sélectionner un fournisseur d'identifiants
OSS prend en charge plusieurs méthodes d'initialisation d'un fournisseur d'identifiants. Choisissez celle qui correspond aux exigences d'authentification et d'autorisation de votre scénario.
|
Méthode d'initialisation |
Scénario |
Paire AccessKey ou jeton STS requis au préalable |
Identifiant sous-jacent |
Durée de validité de l'identifiant |
Méthode de rotation ou d'actualisation de l'identifiant |
|
Pour les applications exécutées dans un environnement sécurisé qui nécessitent un accès à long terme aux services cloud sans rotation fréquente des identifiants. |
Oui |
Clé d'accès |
Long terme |
Rotation manuelle |
|
|
Pour les applications exécutées dans un environnement non fiable où vous souhaitez contrôler la durée de validité et les autorisations des identifiants. |
Oui |
Jeton STS |
Temporaire |
Personnalisé |
|
|
Pour les applications qui doivent obtenir des identifiants d'accès depuis un système externe. |
Non |
Jeton STS |
Temporaire |
Actualisation automatique |
Méthode 1 : Utiliser une paire AccessKey
Si votre application nécessite un accès à long terme à OSS, est déployée dans un environnement sécurisé et stable, et ne peut pas prendre en charge une rotation fréquente des identifiants, utilisez une paire AccessKey de votre compte Alibaba Cloud ou d'un utilisateur RAM (Resource Access Management) pour initialiser le fournisseur d'identifiants. Une paire AccessKey se compose d'un AccessKey ID et d'un AccessKey Secret. Toutefois, cette méthode exige une gestion manuelle de la paire AccessKey, ce qui augmente les risques de sécurité et la complexité de maintenance. Pour savoir comment obtenir une paire AccessKey, consultez la rubrique CreateAccessKey.
Exemple de code
NSString *ak = @"<ALIBABA_CLOUD_ACCESS_KEY_ID>";
NSString *sk = @"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
id<OSSCredentialProvider> credentialProvider = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:ak secretKey:sk];
Méthode 2 : Utiliser un jeton STS
Si votre application nécessite un accès temporaire à OSS et que vous souhaitez mettre en œuvre un contrôle d'accès granulaire et ajuster les autorisations en temps réel pour améliorer la sécurité et la flexibilité, utilisez des identifiants d'identité temporaires du service STS (Security Token Service) pour initialiser le fournisseur d'identifiants. Ces identifiants incluent un AccessKey ID, un AccessKey Secret et un jeton STS. Toutefois, cette méthode exige une gestion manuelle du jeton STS, ce qui augmente les risques de sécurité et la complexité de maintenance. Pour savoir comment obtenir un jeton STS, consultez la rubrique AssumeRole.
Spécifiez une paire AccessKey et un jeton STS dans votre code pour référencer les identifiants. Les exemples suivants montrent comment mettre à jour le jeton STS.
Mettre à jour manuellement le jeton STS
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];
Mettre à jour automatiquement le jeton STS
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éthode 3 : Utiliser CredentialsURI
Si votre application doit obtenir et actualiser automatiquement les identifiants Alibaba Cloud depuis un système externe ou une configuration personnalisée pour une gestion flexible des identifiants et un accès sans clé, utilisez CredentialsURI pour initialiser le fournisseur d'identifiants. Cette méthode utilise un jeton STS comme identifiant sous-jacent. L'outil Credentials obtient le jeton STS à partir de l'URI que vous fournissez pour initialiser le client. Cette méthode ne nécessite pas de fournir de paire AccessKey ni de jeton STS, ce qui élimine les risques liés à la maintenance manuelle.
-
Pour permettre à l'outil Credentials d'analyser et d'utiliser correctement le jeton STS, l'URI doit renvoyer une réponse conforme à ce protocole :
Code d'état de la réponse : 200
-
Structure du corps de la réponse :
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }
-
Configurez l'identifiant URI comme identifiant d'accès.
NSString *authServerUrl = @"<authServerUrl>"; id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:authServerUrl]; -
Si les données sont chiffrées, utilisez la méthode suivante pour les déchiffrer.
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; }];