Tous les produits
Search
Centre de documentation

:Obtain a token using an SDK

Dernière mise à jour :Sep 08, 2026

Générez des jetons côté serveur afin de ne pas exposer les identifiants AccessKey à long terme dans les applications mobiles. Le SDK signe les requêtes. L’application doit stocker les jetons, vérifier leur date d’expiration et en obtenir de nouveaux avant qu’ils n’expirent.

Contexte

Choisissez la méthode adaptée au SDK utilisé dans votre projet. Un seul des deux SDK est nécessaire.

Méthode

Cas d’utilisation

NLS SDK

Utilisez la classe de demande de jeton si le SDK correspondant est déjà intégré.

Alibaba Cloud common SDK

Appelez CreateToken avec un SDK commun. Choisissez un exemple adapté au langage de votre projet.

Configurer les identifiants

Un compte avec le service Intelligent Speech Interaction activé et une paire AccessKey disposant des autorisations requises sont nécessaires. Pour activer le service et configurer les identifiants, consultez Commencer ici.

Les demandes de jeton utilisent une paire AccessKey, et non une clé API Model Studio. Définissez les identifiants dans l’environnement du processus qui exécute l’exemple : ALIYUN_AK_ID pour l’AccessKey ID et ALIYUN_AK_SECRET pour l’AccessKey Secret.

Important

Conservez les identifiants AccessKey dans un environnement serveur de confiance, et non dans le code source ou les applications mobiles. Avant d’appeler un service vocal, une application mobile demande un jeton au serveur d’application. Les exemples affichent uniquement le résultat et la date d’expiration, sans révéler le jeton. Ne journalisez pas les identifiants AccessKey, les jetons ni les requêtes signées complètes.

Obtenir un jeton avec un NLS SDK

Java

Ajoutez les dépendances Maven. L’exemple utilise nls-sdk-common 2.1.6. L’API JAXB est également requise pour exécuter l’exemple sur JDK 21.

<dependency>
    <groupId>com.alibaba.nls</groupId>
    <artifactId>nls-sdk-common</artifactId>
    <version>2.1.6</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

Appelez apply() pour envoyer la requête. Ensuite, appelez getToken() et getExpireTime() pour récupérer le jeton et sa date d’expiration. Cette classe de demande n’actualise pas automatiquement les jetons selon une planification.

import com.alibaba.nls.client.AccessToken;

public class NlsTokenDemo {
    public static void main(String[] args) throws Exception {
        AccessToken request = new AccessToken(
                System.getenv("ALIYUN_AK_ID"),
                System.getenv("ALIYUN_AK_SECRET"),
                "nlsmeta.ap-southeast-1.aliyuncs.com",
                "ap-southeast-1", "2019-07-17");

        request.apply();
        String token = request.getToken();
        long expireTime = request.getExpireTime();
        System.out.println("Token acquired: " + (token != null && !token.isEmpty()));
        System.out.println("ExpireTime (Unix seconds): " + expireTime);
    }
}

Obtenir un jeton avec un SDK commun Alibaba Cloud

Les requêtes RPC effectuées via un SDK commun utilisent les paramètres suivants. Utilisez conjointement l'endpoint, la région et la version de l'API tels qu'indiqués ; ne modifiez pas uniquement l'un d'entre eux.

Paramètre

Valeur

Description

domain

nlsmeta.ap-southeast-1.aliyuncs.com

Endpoint du service de jetons.

region_id

ap-southeast-1

Région de la requête.

action

CreateToken

Opération API.

version

2019-07-17

Version de l'API RPC.

Java

Ajoutez les dépendances Maven. L'exemple utilise aliyun-java-sdk-core 3.7.1 et fastjson 1.2.83. JDK 21 nécessite également JAXB API 2.3.1.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.7.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;

public class CreateTokenDemo {
    public static void main(String[] args) throws Exception {
        DefaultProfile profile = DefaultProfile.getProfile(
                "ap-southeast-1", System.getenv("ALIYUN_AK_ID"),
                System.getenv("ALIYUN_AK_SECRET"));
        DefaultAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setDomain("nlsmeta.ap-southeast-1.aliyuncs.com");
        request.setVersion("2019-07-17");
        request.setAction("CreateToken");
        request.setMethod(MethodType.POST);
        request.setProtocol(ProtocolType.HTTPS);

        CommonResponse response = client.getCommonResponse(request);
        JSONObject result = JSON.parseObject(response.getData()).getJSONObject("Token");
        String token = result.getString("Id");
        long expireTime = result.getLongValue("ExpireTime");
        System.out.println("Token acquired: " + (token != null && !token.isEmpty()));
        System.out.println("ExpireTime (Unix seconds): " + expireTime);
    }
}

Python

Installez la dépendance. L'exemple utilise aliyun-python-sdk-core 2.15.1.

pip install aliyun-python-sdk-core
import json
import os

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

client = AcsClient(
    os.environ["ALIYUN_AK_ID"],
    os.environ["ALIYUN_AK_SECRET"],
    "ap-southeast-1",
)

request = CommonRequest()
request.set_method("POST")
request.set_protocol_type("https")
request.set_domain("nlsmeta.ap-southeast-1.aliyuncs.com")
request.set_version("2019-07-17")
request.set_action_name("CreateToken")

result = json.loads(client.do_action_with_exception(request))
token = result["Token"]["Id"]
expire_time = result["Token"]["ExpireTime"]
print("Token acquired:", bool(token))
print("ExpireTime (Unix seconds):", expire_time)

Go

Installez la dépendance dans un module Go. L'exemple utilise alibaba-cloud-sdk-go 1.63.107.

go get github.com/aliyun/alibaba-cloud-sdk-go/sdk
package main

import (
    "encoding/json"
    "fmt"
    "os"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)

func main() {
    credential := credentials.NewAccessKeyCredential(
        os.Getenv("ALIYUN_AK_ID"), os.Getenv("ALIYUN_AK_SECRET"))
    client, err := sdk.NewClientWithOptions("ap-southeast-1", sdk.NewConfig(), credential)
    if err != nil {
        panic(err)
    }

    request := requests.NewCommonRequest()
    request.Scheme = "HTTPS"
    request.Method = "POST"
    request.Domain = "nlsmeta.ap-southeast-1.aliyuncs.com"
    request.ApiName = "CreateToken"
    request.Version = "2019-07-17"
    response, err := client.ProcessCommonRequest(request)
    if err != nil {
        panic(err)
    }

    var result struct {
        Token struct {
            Id string
            ExpireTime int64
        }
    }
    if err := json.Unmarshal(response.GetHttpContentBytes(), &result); err != nil {
        panic(err)
    }
    token := result.Token.Id
    fmt.Println("Token acquired:", token != "")
    fmt.Println("ExpireTime (Unix seconds):", result.Token.ExpireTime)
}

PHP

Utilisez PHP 7.2 ou une version ultérieure et installez la dépendance avec Composer. L'exemple utilise alibabacloud/sdk 1.8.2345 et alibabacloud/client 1.5.32.

composer require alibabacloud/sdk

Cet exemple utilise une requête RPC commune et définit explicitement l'endpoint, la version de l'API et la méthode HTTP.

<?php
require __DIR__ . '/vendor/autoload.php';

use AlibabaCloud\Client\AlibabaCloud;

AlibabaCloud::accessKeyClient(
    getenv('ALIYUN_AK_ID'), getenv('ALIYUN_AK_SECRET'))
    ->regionId('ap-southeast-1')
    ->asDefaultClient();

$response = AlibabaCloud::rpc()
    ->product('nls-cloud-meta')
    ->version('2019-07-17')
    ->action('CreateToken')
    ->host('nlsmeta.ap-southeast-1.aliyuncs.com')
    ->scheme('https')
    ->method('POST')
    ->request();

$token = $response['Token']['Id'];
$expireTime = $response['Token']['ExpireTime'];
echo 'Token acquired: ' . (!empty($token) ? 'true' : 'false') . PHP_EOL;
echo 'ExpireTime (Unix seconds): ' . $expireTime . PHP_EOL;

Node.js

Installez la dépendance. L'exemple utilise @alicloud/pop-core 1.8.0.

npm install @alicloud/pop-core
const { RPCClient } = require('@alicloud/pop-core');

const client = new RPCClient({
  accessKeyId: process.env.ALIYUN_AK_ID,
  accessKeySecret: process.env.ALIYUN_AK_SECRET,
  endpoint: 'https://nlsmeta.ap-southeast-1.aliyuncs.com',
  apiVersion: '2019-07-17',
});

async function main() {
  const result = await client.request('CreateToken', {}, { method: 'POST' });
  const token = result.Token.Id;
  const expireTime = result.Token.ExpireTime;
  console.log('Token acquired:', Boolean(token));
  console.log('ExpireTime (Unix seconds):', expireTime);
}

main().catch((error) => {
  console.error('CreateToken failed:', error.code || error.name);
  process.exitCode = 1;
});

Réponse et notes d'utilisation

Une fois qu'une requête SDK standard aboutit, lisez les champs suivants dans l'objet Token de la réponse. Le NLS SDK pour Java renvoie ces valeurs via les méthodes correspondantes.

Champ

Type

Description

Id

String

La chaîne de jeton pour les requêtes ultérieures adressées au service vocal. Dans le NLS SDK pour Java, utilisez getToken().

ExpireTime

Long

L'heure d'expiration sous forme d'horodatage Unix en secondes. Dans le NLS SDK pour Java, utilisez getExpireTime().

  • Mettez en cache et réutilisez un jeton tant qu'il est valide, au lieu d'en obtenir un avant chaque requête adressée au service vocal. Utilisez la valeur ExpireTime renvoyée pour déterminer quand le jeton expire. Obtenez un nouveau jeton et mettez à jour le cache avant l'expiration. Ne remplacez pas la valeur renvoyée par une durée fixe.

  • Plusieurs processus ou applications dans un environnement de confiance peuvent utiliser le même jeton. Obtenez les jetons depuis l'endpoint configuré dans ces exemples. N'interchangez pas les jetons émis par les endpoints de Shanghai et de Singapour.

  • Transmettez la chaîne Id au service vocal, et non la réponse JSON complète, les identifiants AccessKey ou un autre champ. Transmettez le jeton à l'emplacement requis par le protocole d'authentification de l'API vocale.

FAQ

Comment résoudre les échecs de requête de jeton ?

Utilisez le code d'erreur renvoyé par le SDK pour identifier la cause. Une paire AccessKey incorrecte n'est pas la seule cause des erreurs d'authentification.

Code d'erreur

Dépannage

InvalidAccessKeyId.NotFound

Vérifiez que l'AccessKey ID est correct, qu'il appartient à l'identité prévue et qu'il ne contient aucun espace ajouté lors de la copie.

SignatureDoesNotMatch

Vérifiez que l'AccessKey ID et l'AccessKey secret forment une paire correspondante et que les paramètres signés n'ont pas été modifiés. Utilisez un SDK standard pour construire les requêtes au lieu d'assembler manuellement les signatures.

InvalidTimeStamp.Expired

Vérifiez que l'horloge du système demandeur est synchronisée avec l'heure standard. Cette erreur concerne l'horodatage de la requête, et non l'expiration d'un jeton émis.

InvalidVersion

Vérifiez l'endpoint et la version de l'API, et distinguez les requêtes RPC des requêtes ROA. Le style de requête PHP doit correspondre à sa version d'API.

Que faire si une API vocale signale un jeton invalide ?

Le code 40000001 indique une erreur d'authentification lors de l'appel d'un service vocal. Vérifiez que la chaîne de jeton réelle et tous les paramètres d'authentification requis sont fournis, que le jeton n'a pas expiré et que son endpoint d'émission correspond à la configuration du service. Le même code d'erreur peut avoir plusieurs causes ; vérifiez le message d'erreur complet.

Comment résoudre l'erreur « Not supported proxy scheme » ?

Vérifiez les variables http_proxy et https_proxy, ainsi que les proxys configurés dans l'application. Utilisez un protocole de proxy pris en charge par le SDK et vérifiez l'adresse du proxy, le port et la disponibilité. Si le réseau ne nécessite pas de proxy, supprimez les paramètres de proxy et réessayez.

Rubriques connexes