Credentials 设置
升级版 SDK 的 Credentials 设置。
使用 AccessKey 调用(包含 STS Token 方式)
确保包含 AccessKey 的代码不会泄漏(例如提交到外部公开的 GitHub 项目),否则将会危害您的阿里云账号的信息安全。
直接通过 com.aliyun.teaopenapi.models.Config
配置进行设置:
import Client from "@alicloud/facebody20191230";
import * as Util from "@alicloud/tea-util";
// 创建客户端
const client = new Client({
endpoint: "<endpoint>",
accessKeyId: "<accessKeyId>",
accessKeySecret: "<accessKeySecret>",
// securityToken: "your sts token",
type: "access_key",
regionId: "cn-hangzhou"
});
// 初始化 runtimeObject
const runtimeObject = new Util.RuntimeOptions({});
// 初始化 request
const addFaceEntityRequest = new AddFaceEntityRequest({
dbName: "dbName",
entityId: "entityId",
labels: "labels"
});
// 调用 api
const res = await client.addFaceEntity(addFaceEntityRequest, runtimeObject);
或者使用 SDK Credentials 的方式,该方式是最权威的方式,提供了多种 Credentials 认证配置。下面我们主要介绍 SDK Credentials 的方式。
使用 SDK Credentials 包
安装
请确保您的系统安装了不低于 8.x 版本的 Node.js 环境并对 TypeScript 有一定了解。
使用 npm
下载安装。
为了良好体验,请尽量使用 credentials 最新版本,每个版本都是对上个版本的修复与优化,详细请参考变更历史。
npm install @alicloud/credentials
使用
本节以云服务器(ECS) DescribeInstances 接口为例,配置 AccessKey 凭证发送请求,作为 SDK Credentials 使用参考。
Credentials 是凭证工具,调用具体接口仍需要产品依赖。本例中调用云服务器(ECS) DescribeInstances 接口则需要安装云服务器(ECS) 的 SDK。
npm install @alicloud/ecs20140526@3.0.2
// This file is auto-generated, don't edit it
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Console from '@alicloud/tea-console';
import Util, * as $Util from '@alicloud/tea-util';
import Credential, { Config } from '@alicloud/credentials';
export default class Sample {
static async main(): Promise<void> {
const config=new Config ({
type: 'access_key',
accessKeyId: '<accessKeyId>',
accessKeySecret: '<accessKeySecret>',
})
const cred = new Credential(config);
let client = new Ecs20140526(new $OpenApi.Config({
credential: cred,
endpoint: "ecs.cn-hangzhou.aliyuncs.com"
}));
let describeInstancesRequest = new $Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
let runtime = new $Util.RuntimeOptions({});
let resp = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
console.log(resp);
}
}
Sample.main();
配置 STS Token
通过安全令牌服务(Security Token Service,简称 STS),申请临时安全凭证(Temporary Security Credentials,简称 TSC),创建临时安全凭证。
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'sts', // 凭证类型
accessKeyId: '<accessKeyId>', // AccessKeyId
accessKeySecret: '<accessKeySecret>', // AccessKeySecret
securityToken: '<securityToken>', // STS Token
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let type: string = cred.getType();
配置 RamRoleArn
通过指定RAM角色,让凭证自动申请维护 STS Token。你可以通过为 Policy
赋值来限制获取到的 STS Token 的权限。
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'ram_role_arn', // 凭证类型
accessKeyId: '<accessKeyId>', // AccessKeyId
accessKeySecret: '<accessKeySecret>', // AccessKeySecret
roleArn: '<roleArn>', // 格式: acs:ram::用户ID:role/角色名
roleSessionName: '<roleSessionName>', // 角色会话名称
policy: '<policy>', // 可选, 限制 STS Token 的权限
roleSessionExpiration: 3600, // 可选, 限制 STS Token 的有效时间
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();
配置 EcsRamRole
通过指定角色名称,让凭证自动申请维护 STS Token
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'ecs_ram_role', // 凭证类型
roleName: '<roleName>', // 账户RoleName,非必填,不填则自动获取,建议设置,可以减少请求
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();
配置 RsaKeyPair
通过指定公钥ID和私钥文件,让凭证自动申请维护 AccessKey。仅支持日本站。
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'rsa_key_pair', // 凭证类型
privateKeyFile: '<privateKeyFile>', // PrivateKey文件路径
publicKeyId: '<publicKeyId>', // 账户PublicKeyId
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();
配置 Bearer Token
如呼叫中心(CCC)需用此凭证,请自行申请维护 Bearer Token。
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'bearer', // 凭证类型
bearerToken: '<bearerToken>', // BearerToken
}
const cred = new Credential(config);
let bearerToken: string = cred.getBearerToken();
let type: string = cred.getType();
配置 credentials_uri
通过本地或者远程的 URI,来获取凭证,并支持自动刷新。
import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
type: 'credentials_uri',
credentialsURI: 'http://a_local_or_remote_address/'
};
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();
该地址必须满足如下条件:
响应 200 状态码
响应体为如下的结构:
{
"Code": "Success",
"AccessKeySecret": "AccessKeySecret",
"AccessKeyId": "AccessKeyId",
"Expiration": "2021-09-26T03:46:38Z",
"SecurityToken": "SecurityToken"
}
凭证提供程序链
如果你调用 new Credential()
时传入空, 将通过凭证提供链来为你获取凭证。
1. 环境凭证
程序首先会在环境变量里寻找环境凭证,如果定义了 ALICLOUD_ACCESS_KEY
和 ALICLOUD_SECRET_KEY
环境变量且不为空,程序将使用他们创建凭证。如否则,程序会在配置文件中加载和寻找凭证。
2. 配置文件
如果用户主目录存在默认文件 ~/.alibabacloud/credentials
(Windows 为 C:\Users\USER_NAME\.alibabacloud\credentials
),程序会自动创建指定类型和名称的凭证。默认文件可以不存在,但解析错误会抛出异常。不同的项目、工具之间可以共用这个配置文件,因为超出项目之外,也不会被意外提交到版本控制。Windows 上可以使用环境变量引用到主目录 %UserProfile%。类 Unix 的系统可以使用环境变量 $HOME 或 ~ (tilde)。 可以通过定义 ALIBABA_CLOUD_CREDENTIALS_FILE
环境变量修改默认文件的路径。
[default] # 默认凭证
type = access_key # 认证方式为 access_key
access_key_id = foo # access key id
access_key_secret = bar # access key secret
3. 实例 RAM 角色
如果定义了环境变量 ALIBABA_CLOUD_ECS_METADATA
且不为空,程序会将该环境变量的值作为角色名称,请求 http://100.100.100.200/latest/meta-data/ram/security-credentials/
获取临时安全凭证。
4. Credentials URI
如果定义了环境变量 ALIBABA_CLOUD_CREDENTIALS_URI
且不为空,程序会将该环境变量的值作为 credentials_uri 模式的地址,在调用时获取临时安全凭证。