Pour envoyer des requêtes à OSS depuis le SDK Android, configurez les informations d'identification d'accès. Choisissez un fournisseur d'informations d'identification adapté à vos besoins en matière d'authentification et d'autorisation.
Prérequis
Le SDK Android OSS est installé. Installer le SDK Android.
Initialiser le fournisseur d'informations d'identification
Choisir un fournisseur d'informations d'identification
OSS prend en charge plusieurs méthodes d'initialisation du fournisseur d'informations d'identification. Sélectionnez celle qui correspond à votre scénario.
Un appareil mobile constitue un environnement non fiable. Toute information d'identification disposant d'un accès complet — qu'il s'agisse d'une paire de clés AccessKey à long terme ou d'un jeton STS temporaire — présente sur le client peut être extraite par rétro-ingénierie ou débogage au moment de l'exécution. Pour réduire les risques de fuite de données, structurez le chemin d'accès entre votre application mobile et OSS comme suit :
Conservez les paires de clés AccessKey à long terme sur votre serveur d'application. Ne les intégrez jamais dans le client mobile.
Faites en sorte que l'application mobile récupère des informations d'identification temporaires STS ou une URL présignée auprès de votre serveur d'application avant d'appeler OSS.
Lorsque vous utilisez des informations d'identification temporaires STS, appliquez une politique RAM qui limite les autorisations au préfixe de chemin d'accès des objets d'un utilisateur unique et définissez une courte période de validité.
Pour les téléchargements et téléversements de données sensibles telles que les cartes d'identité, les images faciales, les informations de paiement ou les dossiers médicaux, faites générer une URL présignée par votre serveur d'application à l'intention de l'application mobile. L'application mobile elle-même ne détient aucune information d'identification. Pour plus de détails sur les URL présignées, consultez la rubrique Autoriser l'accès (SDK Android).
|
Méthode d'initialisation du fournisseur d'informations d'identification |
Scénario |
Nécessite une paire AccessKey ou un jeton STS préconfiguré |
Type d'information d'identification sous-jacent |
Validité de l'information d'identification |
Méthode de rotation ou d'actualisation de l'information d'identification |
|
Environnements sécurisés et stables, non vulnérables aux attaques externes, nécessitant un accès à long terme sans rotation fréquente des informations d'identification. |
Oui |
AccessKey |
À long terme |
Rotation manuelle |
|
|
Environnements non fiables où vous devez contrôler la validité et les autorisations des informations d'identification. |
Oui |
Jeton STS |
Temporaire |
Personnalisée |
|
|
Applications qui obtiennent des informations d'identification à partir d'un système externe. |
Non |
Jeton STS |
Temporaire |
Actualisation automatique |
Méthode 1 : Utiliser une paire AccessKey
Utilisez la paire AccessKey (AccessKey ID et AccessKey Secret) d'un compte Alibaba Cloud ou d'un utilisateur RAM pour initialiser le fournisseur d'informations d'identification. Cette méthode convient aux environnements sécurisés et stables qui nécessitent un accès à long terme à OSS sans rotation fréquente des informations d'identification. La maintenance manuelle des clés pose des risques de sécurité et augmente la complexité de la maintenance. Pour obtenir une paire AccessKey, appelez l'opération CreateAccessKey - Créer une paire AccessKey pour un compte Alibaba Cloud ou un utilisateur RAM.
Cette méthode n'est pas recommandée pour les clients mobiles. Un compte Alibaba Cloud dispose de toutes les autorisations sur toutes les ressources. Si la paire AccessKey d'un compte Alibaba Cloud fuit, votre système est exposé à des risques de sécurité élevés. Si vous devez utiliser cette méthode, privilégiez la paire AccessKey d'un utilisateur RAM disposant uniquement des autorisations minimales requises.
Exemple de code
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
CredentialProvider credentialProvider = new DefaultCredentialProvider(ak, sk);
Méthode 2 : Utiliser un jeton STS
Utilisez des informations d'identification temporaires issues de STS pour initialiser le fournisseur d'informations d'identification. Cette approche convient aux applications qui nécessitent un accès temporaire à OSS avec un contrôle granulaire et en temps réel des autorisations. Les informations d'identification comprennent un AccessKey ID, un AccessKey Secret et un jeton STS. La maintenance manuelle des jetons pose des risques de sécurité et augmente la complexité de la maintenance. Pour obtenir un jeton STS, appelez l'opération AssumeRole - Obtenir des informations d'identification d'identité temporaires pour un rôle RAM.
Les exemples suivants illustrent comment mettre à jour le jeton STS manuellement ou automatiquement.
Mettre à jour manuellement le jeton STS
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
String token = "<ALIBABA_CLOUD_SECURITY_TOKEN>";
CredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(ak, sk, token);
Mettre à jour automatiquement le jeton STS
CredentialProvider credentialProvider = new OSSFederationCredentialProvider() {
@Override
public OSSFederationToken getFederationToken() {
/* Obtain the AccessKey ID, AccessKey secret, STS token, and expiration time.
* The following example shows how to obtain the credentials from an application server:
* URL stsUrl = new URL("<server_url>");
* HttpURLConnection conn = (HttpURLConnection) stsUrl.openConnection();
* InputStream input = conn.getInputStream();
* String jsonText = IOUtils.readStreamAsString(input, OSSConstants.DEFAULT_CHARSET_NAME);
* JSONObject jsonObjs = new JSONObject(jsonText);
* String ak = jsonObjs.getString("AccessKeyId");
* String sk = jsonObjs.getString("AccessKeySecret");
* String token = jsonObjs.getString("SecurityToken");
* String expiration = jsonObjs.getString("Expiration");
*/
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
String token = "<ALIBABA_CLOUD_SECURITY_TOKEN>";
String expiration = "<ALIBABA_CLOUD_EXPIRATION>";
// Construct an OSSFederationToken object from the AccessKey ID, AccessKey secret, STS token, and expiration time.
OSSFederationToken federationToken = new OSSFederationToken(ak, sk, token, expiration);
return federationToken;
}
};
Méthode 3 : Utiliser CredentialsURI
Utilisez CredentialsURI pour initialiser le fournisseur d'informations d'identification lorsque votre application doit obtenir des informations d'identification à partir d'un système externe, afin de bénéficier d'une gestion flexible des clés et d'un accès sans clé. L'implémentation sous-jacente repose sur un jeton STS. L'outil Credentials utilise l'URI que vous fournissez pour récupérer un jeton STS et initialiser le client. Cela élimine le besoin de fournir directement une paire AccessKey ou un jeton STS.
L'URL remote_url (authServerUrl dans l'exemple de code) doit être fournie par un service backend que vous déployez vous-même. Il ne s'agit pas d'une URL fournie par Alibaba Cloud. L'outil Credentials envoie une requête HTTP GET à cette URL, et votre service backend doit renvoyer des informations d'identification temporaires conformes au protocole décrit ci-dessous.
-
L'URI doit renvoyer une réponse conforme au protocole suivant :
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" }Dans le corps de la réponse,
StatusCodeest défini sur 200 par votre service backend. Les champsAccessKeyId,AccessKeySecret,ExpirationetSecurityTokenproviennent de l'objet Credentials renvoyé par l'opérationAssumeRolede STS. Votre service backend doit appelerAssumeRolepour obtenir ces valeurs, puis les inclure dans le corps de la réponse. Pour plus d'informations surAssumeRole, consultez la rubrique Utiliser des informations d'identification d'accès temporaires STS pour accéder à OSS.
Exemple de service backend (Python) :
from alibabacloud_sts20150401.client import Client as StsClient from alibabacloud_sts20150401 import models as sts_models import json def get_credentials(): request = sts_models.AssumeRoleRequest( role_arn='<your_role_arn>', role_session_name='<your_session_name>' ) response = sts_client.assume_role(request) creds = response.body.credentials return json.dumps({ 'StatusCode': 200, 'AccessKeyId': creds.access_key_id, 'AccessKeySecret': creds.access_key_secret, 'Expiration': creds.expiration, 'SecurityToken': creds.security_token })Exemple de service backend (Node.js) :
const STS = require("@alicloud/sts20150401"); const stsClient = new STS.default({ accessKeyId: "<yourAccessKeyId>", accessKeySecret: "<yourAccessKeySecret>", endpoint: "sts.aliyuncs.com", }); const result = await stsClient.assumeRole("<roleArn>", "<sessionName>"); const creds = result.body.credentials; res.status(200).json({ StatusCode: 200, AccessKeyId: creds.accessKeyId, AccessKeySecret: creds.accessKeySecret, Expiration: creds.expiration, SecurityToken: creds.securityToken, }); -
Configurez les informations d'identification URI comme informations d'identification d'accès.
String authServerUrl = "<remote_url>"; OSSAuthCredentialsProvider credentialProvider = new OSSAuthCredentialsProvider(authServerUrl); /* If the data is encrypted, you can use the following code to decrypt it. * credentialProvider.setDecoder(new OSSAuthCredentialsProvider.AuthDecoder() { * @Override * public String decode(String data) { * String result = null; * // Decrypt the data. * // result = ... * return result; * } * }); */