日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過SDK獲取Token

SDK內(nèi)封裝了獲取和刷新Token的過程,使用戶無需手動處理復(fù)雜的認(rèn)證邏輯和Token有效期管理,簡化了開發(fā)流程,提升了開發(fā)效率,更加安全有效。本文介紹如何通過SDK方式獲取Token。

背景信息

通過SDK獲取Token方式

說明

通過智能語音交互SDK獲取Token

適用于通過智能語音交互SDK直接獲取Token的場景, 建議您集成此SDK。

通過阿里云公共SDK獲取Token

適用于當(dāng)前智能語音交互暫未提供對應(yīng)語言SDK獲取Token的場景。

前提條件

  • 已獲取AccessKey ID和AccessKey Secret,具體操作,請參見從這里開始。

  • 調(diào)用接口前,需配置環(huán)境變量,通過環(huán)境變量讀取訪問憑證。智能語音交互的AccessKey ID和AccessKey Secret的環(huán)境變量名:ALIYUN_AK_IDALIYUN_AK_SECRET。

通過智能語音交互SDK獲取Token

調(diào)用示例(Java)

從Maven服務(wù)器下載最新版本SDK,下載demo源碼ZIP包

<dependency>
    <groupId>com.alibaba.nls</groupId>
    <artifactId>nls-sdk-common</artifactId>
    <version>2.1.6</version>
</dependency>

Java代碼獲取訪問令牌Token實現(xiàn)示例如下:

AccessToken accessToken = new AccessToken(System.getenv().get("ALIYUN_AK_ID"), System.getenv().get("ALIYUN_AK_SECRET"));
accessToken.apply();
String token = accessToken.getToken();
long expireTime = accessToken.getExpireTime();
  • token為服務(wù)端分配的Token,在Token過期失效前,可以一直使用,也支持在不同機器、進(jìn)程或應(yīng)用上同時使用該Token。

  • expireTime為此令牌的有效期時間戳,單位:秒。例如,1527592757換算為北京時間為2018/5/29 19:19:17,即Token在該時間之前有效,過期需要重新獲取。

說明

當(dāng)前獲取Token需要獲取AccessKey ID和AccessKey Secret,為了安全起見,一般不建議在端側(cè)操作,比如在移動端等環(huán)境下保存AccessKey ID和AccessKey Secret,建議您在安全可靠的環(huán)境中使用AccessKey ID和AccessKey Secret。

如果您的使用場景是移動端APP,可以考慮自行在服務(wù)端搭建一個Token生成器的服務(wù),將AccessKey ID和AccessKey Secret放在服務(wù)端,APP調(diào)用語音識別前,先向您的服務(wù)端請求下發(fā)Token,之后通過此Token向智能語音服務(wù)發(fā)起調(diào)用。

調(diào)用示例(C++)

說明
  • Linux下安裝工具要求如下:

    • Glibc 2.5及以上

    • Gcc4或Gcc5

  • Windows下:VS2013或VS2015,Windows平臺需要您自己搭建工程。

  1. 下載 C++ Token SDK

  2. 編譯示例。

    假設(shè)示例文件已解壓至path/to路徑下,在Linux終端依次執(zhí)行如下命令編譯運行程序。

    • 當(dāng)您的開發(fā)環(huán)境支持通過CMake編譯:

      1. 確認(rèn)本地系統(tǒng)已安裝Cmake2.4及以上版本。

      2. 切換目錄:cd path/to/sdk/lib。

      3. 解壓縮文件:tar -zxvpf linux.tar.gz。

      4. 切換目錄:cd path/to/sdk

      5. 執(zhí)行編譯腳本:./build.sh。

      6. 切換目錄:cd path/to/sdk/demo。

      7. 執(zhí)行獲取Token示例:./tokenDemo <yourAccessKeySecret> <yourAccessKeyId>。

    • 當(dāng)您的開發(fā)環(huán)境不支持通過CMake編譯:

      1. 切換目錄:cd path/to/sdk/lib

      2. 解壓縮文件:tar -zxvpf linux.tar.gz。

      3. 切換目錄:cd path/to/sdk/demo。

      4. 使用g++編譯命令編譯示例程序:g++ -o tokenDemo tokenDemo.cpp -I path/to/sdk/include/ -L path/to/sdk/lib/linux -ljsoncpp -lssl -lcrypto -lcurl -luuid -lnlsCommonSdk -D_GLIBCXX_USE_CXX11_ABI=0

      5. 指定庫路徑:export LD_LIBRARY_PATH=path/to/sdk/lib/linux/。

      6. 執(zhí)行獲取Token示例:./tokenDemo <yourAccessKeySecret> <yourAccessKeyId>。

  3. 調(diào)用服務(wù)。

    C++獲取訪問令牌Token的示例代碼如下:

    #include <iostream>
    #include "Token.h"
    
    using std::cout;
    using std::endl;
    using namespace AlibabaNlsCommon;
    
    //獲取訪問令牌TokenId
    int getTokenId(const char* keySecret, const char* keyId) {
        NlsToken nlsTokenRequest;
    
        /*設(shè)置阿里云賬號KeySecret*/
        nlsTokenRequest.setKeySecret(getenv("ALIYUN_AK_SECRET"));
        /*設(shè)置阿里云賬號KeyId*/
        nlsTokenRequest.setAccessKeyId(getenv("ALIYUN_AK_ID"));
    
        /*獲取Token. 成功返回0, 失敗返回-1*/
        if (-1 == nlsTokenRequest.applyNlsToken()) {
            cout << "Failed: " << nlsTokenRequest.getErrorMsg() << endl; /*獲取失敗原因*/
    
            return -1;
        } else {
            cout << "TokenId: " << nlsTokenRequest.getToken() << endl; /*獲取TokenId*/
            cout << "TokenId expireTime: " << nlsTokenRequest.getExpireTime() << endl; /*獲取Token有效期時間戳(秒)*/
    
            return 0;
        }
    }

通過阿里云公共SDK獲取Token

使用阿里云公共SDK獲取Token,建議采用RPC風(fēng)格的API調(diào)用。發(fā)起一次RPC風(fēng)格的CommonAPI請求,需要提供以下參數(shù):

參數(shù)名

參數(shù)值

說明

domain

nls-meta.cn-shanghai.aliyuncs.com

產(chǎn)品的通用訪問域名,固定值。

region_id

cn-shanghai

服務(wù)的地域ID,固定值。

action

CreateToken

API的名稱,固定值。

version

2019-02-28

API的版本號,固定值。

通過阿里云SDK獲取Token時,如果成功調(diào)用,則會返回如下報文:

通過阿里云公共SDK獲取Token

  • Id為本次分配的訪問令牌Token,在Token過期失效前,可以一直使用,也支持在不同機器、進(jìn)程或應(yīng)用上同時使用該Token。

  • ExpireTime為此令牌的有效期時間戳,單位:秒。如,1527592757換算為北京時間為2018/5/29 19:19:17,即Token在該時間之前有效,過期需要重新獲取。

調(diào)用示例(Java)

  1. 添加Java依賴。

    添加阿里云Java SDK的核心庫(版本為3.7.1)和fastjson庫。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>3.7.1</version>
    </dependency>
    
    <!-- http://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
    </dependency>

  2. 調(diào)用服務(wù)。

    獲取訪問令牌的示例代碼如下:

    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.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.http.ProtocolType;
    import com.aliyuncs.profile.DefaultProfile;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class CreateTokenDemo {
    
        // 地域ID
        private static final String REGIONID = "cn-shanghai";
        // 獲取Token服務(wù)域名
        private static final String DOMAIN = "nls-meta.cn-shanghai.aliyuncs.com";
        // API版本
        private static final String API_VERSION = "2019-02-28";
        // API名稱
        private static final String REQUEST_ACTION = "CreateToken";
    
        // 響應(yīng)參數(shù)
        private static final String KEY_TOKEN = "Token";
        private static final String KEY_ID = "Id";
        private static final String KEY_EXPIRETIME = "ExpireTime";
    
    
        public static void main(String args[]) throws ClientException {
    
            String accessKeyId = System.getenv().get("ALIYUN_AK_ID");
            String accessKeySecret = System.getenv().get("ALIYUN_AK_SECRET");
    
            // 創(chuàng)建DefaultAcsClient實例并初始化
            DefaultProfile profile = DefaultProfile.getProfile(
                    REGIONID,
                    accessKeyId,
                    accessKeySecret);
    
            IAcsClient client = new DefaultAcsClient(profile);
            CommonRequest request = new CommonRequest();
            request.setDomain(DOMAIN);
            request.setVersion(API_VERSION);
            request.setAction(REQUEST_ACTION);
            request.setMethod(MethodType.POST);
            request.setProtocol(ProtocolType.HTTPS);
    
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            if (response.getHttpStatus() == 200) {
                JSONObject result = JSON.parseObject(response.getData());
                String token = result.getJSONObject(KEY_TOKEN).getString(KEY_ID);
                long expireTime = result.getJSONObject(KEY_TOKEN).getLongValue(KEY_EXPIRETIME);
                System.out.println("獲取到的Token: " + token + ",有效期時間戳(單位:秒): " + expireTime);
                // 將10位數(shù)的時間戳轉(zhuǎn)換為北京時間
                String expireDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(expireTime * 1000));
                System.out.println("Token有效期的北京時間:" + expireDate);
            }
            else {
                System.out.println("獲取Token失敗!");
            }
        }
    }

調(diào)用示例(Python)

使用pip安裝SDK。

  1. 執(zhí)行以下命令,通過pip安裝Python SDK,版本為2.15.1。

    pip install aliyun-python-sdk-core==2.15.1 # 安裝阿里云SDK核心庫
  2. 調(diào)用服務(wù)。

    示例代碼如下:

    #! /usr/bin/env python
    # coding=utf-8
    import os
    import time
    import json
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkcore.request import CommonRequest
    
    # 創(chuàng)建AcsClient實例
    client = AcsClient(
       os.getenv('ALIYUN_AK_ID'),
       os.getenv('ALIYUN_AK_SECRET'),
       "cn-shanghai"
    );
    
    # 創(chuàng)建request,并設(shè)置參數(shù)。
    request = CommonRequest()
    request.set_method('POST')
    request.set_domain('nls-meta.cn-shanghai.aliyuncs.com')
    request.set_version('2019-02-28')
    request.set_action_name('CreateToken')
    
    try : 
       response = client.do_action_with_exception(request)
       print(response)
    
       jss = json.loads(response)
       if 'Token' in jss and 'Id' in jss['Token']:
          token = jss['Token']['Id']
          expireTime = jss['Token']['ExpireTime']
          print("token = " + token)
          print("expireTime = " + str(expireTime))
    except Exception as e:
       print(e)

調(diào)用示例(GO)

開發(fā)前請先安裝alibaba-cloud-sdk-go,具體操作請參見安裝操作。

示例代碼如下:

package main
import (
    "fmt"
    "encoding/json"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)

type TokenResult struct {
    ErrMsg string
    Token struct {
        UserId      string
        Id          string
        ExpireTime  int64
    }
  }

func main() {
    client, err := sdk.NewClientWithAccessKey("cn-shanghai",os.Getenv("ALIYUN_AK_ID"),os.Getenv("ALIYUN_AK_SECRET"))
    if err != nil {
        panic(err)
    }
    request := requests.NewCommonRequest()
    request.Method = "POST"
    request.Domain = "nls-meta.cn-shanghai.aliyuncs.com"
    request.ApiName = "CreateToken"
    request.Version = "2019-02-28"
    response, err := client.ProcessCommonRequest(request)
    if err != nil {
        panic(err)
    }
    fmt.Print(response.GetHttpStatus())
    fmt.Print(response.GetHttpContentString())

    var tr TokenResult
    err = json.Unmarshal([]byte(response.GetHttpContentString()), &tr)
    if err == nil {
        fmt.Println(tr.Token.Id)
        fmt.Println(tr.Token.ExpireTime)
    } else {
        fmt.Println(err)
    }
}

調(diào)用示例(PHP)

安裝前請確保環(huán)境使用的是PHP 7.2及以上版本,PHP SDK安裝方式請參見安裝Alibaba Cloud SDK for PHP 。

  1. 創(chuàng)建一個全局客戶端。

  2. 創(chuàng)建API請求,設(shè)置參數(shù)。

  3. 發(fā)起請求,處理應(yīng)答或異常。

PHP代碼獲取訪問令牌Token代碼示例如下:

<?php
require __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
/**
 * 第一步:設(shè)置一個全局客戶端
 * 使用阿里云RAM賬號的AccessKey ID和AccessKey Secret進(jìn)行鑒權(quán)。
 */
AlibabaCloud::accessKeyClient(
            getenv('ALIYUN_AK_ID'),
            getenv('ALIYUN_AK_SECRET'))
            ->regionId("cn-shanghai")
            ->asDefaultClient();
try {
    $response = AlibabaCloud::nlsCloudMeta()
                            ->v20180518()
                            ->createToken()
                            ->request();
    print $response . "\n";
    $token = $response["Token"];
    if ($token != NULL) {
        print "Token 獲取成功:\n";
        print_r($token);
        print "獲取到的token是:" . $token["Id"] ."\n";
        date_default_timezone_set('Asia/Shanghai');
        print "獲取到的token過期時間是:" . $token["ExpireTime"] . "\n";
    }
    else {
        print "token 獲取失敗\n";
    }
} catch (ClientException $exception) {
    // 獲取錯誤消息
    print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
    // 獲取錯誤消息
    print_r($exception->getErrorMessage());
}
說明

上述示例代碼是基于阿里云新版PHP SDK進(jìn)行示例,請參見Alibaba Cloud SDK for PHP。如果您已接入阿里云舊版PHP SDK,參見aliyun-openapi-php-sdk,仍然可以繼續(xù)使用或者更新到新版SDK。

調(diào)用示例(Node.js)

  1. 安裝Node.js SDK。

    建議使用npm完成Node.js依賴模塊的安裝,所有阿里官方的Node.js SDK都位于@alicloud下。

    假設(shè)Node.js SDK下載后的路徑為/path/to/aliyun-openapi-Node.js-sdk。當(dāng)基于SDK核心庫進(jìn)行開發(fā)時,請執(zhí)行以下命令安裝@alicloud/pop-core模塊。

    命令中的--save會將模塊寫入應(yīng)用的package.json文件中,作為依賴模塊。

     npm install @alicloud/pop-core --save
    說明

    您也可以從GitHub上下載SDK,請參見GitHub下載SDK。

  2. 調(diào)用服務(wù)。

    示例代碼如下:

    var RPCClient = require('@alicloud/pop-core').RPCClient;
    
    var client = new RPCClient({
      accessKeyId: process.env.ALIYUN_AK_ID,
      accessKeySecret: process.env.ALIYUN_AK_SECRET,
      endpoint: 'http://nls-meta.cn-shanghai.aliyuncs.com',
      apiVersion: '2019-02-28'
    });
    
    // => returns Promise
    // => request(Action, params, options)
    client.request('CreateToken').then((result) => {
        console.log(result.Token)
        console.log("token = " + result.Token.Id)
        console.log("expireTime = " + result.Token.ExpireTime)
    });

常見問題

在獲取Token過程中,可能會出現(xiàn)各種異常問題,整體的排查思路如下:

  1. 您可以根據(jù)錯誤碼以及錯誤信息在阿里云官方的錯誤代碼表中找到對應(yīng)錯誤含義及解決方案。例如,使用一個不存在的AccessKeyId調(diào)用服務(wù)獲取Token時,可能返回如下結(jié)果:

    {
      "RequestId":"F5805076-38C5-5093-B5BD-9176ECD9CBBD",
      "Message":"Specified access key is not found.",
      "Recommend":"https://next.api.aliyun.com/troubleshoot?q=InvalidAccessKeyId.NotFound&amp;product=nls-cloud-meta",
      "HostId":"nls-meta.cn-shanghai.aliyuncs.com",
      "Code":"InvalidAccessKeyId.NotFound"
    }

    錯誤代碼表搜索該段代碼中錯誤信息的關(guān)鍵字,例如,InvalidAccessKeyId.NotFoundSpecified access key is not found,可以獲取相關(guān)錯誤碼詳情。錯誤碼

  2. 您也可以在阿里云OpenAPI診斷中心頁面輸入錯誤信息,查找解決方案。

    api診斷

相關(guān)文檔

除了SDK方式獲取Token,您還可以通過以下方式獲取Token: