Pour envoyer des requêtes à OSS depuis le SDK Android, configurez les informations d'identification d'accès. Choisissez le fournisseur d'informations d'identification adapté à vos exigences 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. Choisissez celle qui correspond à votre scénario.
Un appareil mobile constitue un environnement non fiable. Toute information d'identification offrant un accès complet — qu'il s'agisse d'une paire AccessKey à long terme ou d'un jeton STS temporaire — atteignant le client peut être extraite par ingénierie inverse 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 AccessKey à long terme sur votre serveur d'application. Ne les envoyez jamais au client mobile.
Récupérez un jeton temporaire 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 aux objets d'un seul utilisateur et définissez une période de validité courte.
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 présente 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 est divulguée, votre système est exposé à des risques de sécurité élevés. Si vous devez utiliser cette méthode, utilisez 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 présente 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 montrent 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 informations d'identification et d'un accès sans clé. L'implémentation sous-jacente utilise 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'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" }
-
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; * } * }); */