Tous les produits
Search
Centre de documentation

Object Storage Service:Configurer les informations d'identification d'accès (SDK Android)

Dernière mise à jour :Sep 02, 2026

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.

Important

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

Méthode 1 : Utiliser une paire AccessKey

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

Méthode 2 : Utiliser un jeton STS

Environnements non fiables où vous devez contrôler la validité et les autorisations des informations d'identification.

Oui

Jeton STS

Temporaire

Personnalisée

Méthode 3 : Utiliser CredentialsURI

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.

Avertissement

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.

  1. 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, StatusCode est défini sur 200 par votre service backend. Les champs AccessKeyId, AccessKeySecret, Expiration et SecurityToken proviennent de l'objet Credentials renvoyé par l'opération AssumeRole de STS. Votre service backend doit appeler AssumeRole pour obtenir ces valeurs, puis les inclure dans le corps de la réponse. Pour plus d'informations sur AssumeRole, 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,
    });
  2. 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;
     *     }
     * });
     */