开发工具/SDK 参考/Node.js SDK/配置访问密钥
配置访问密钥
更新于: 2026-06-25 19:29:14
通过 Node.js SDK 方式调用扣子编程 OpenAPI 时,需要在 SDK 请求中配置访问密钥,用于身份信息认证和权限校验。扣子编程 OpenAPI 提供个人访问密钥和 OAuth 两种鉴权方式。可以选择当前业务场景适合的鉴权方式,并获取对应的访问密钥。
对于 OAuth 授权码等授权方式,Node.js SDK 已经封装了这部分代码,并处理了不同的返回错误代码,简化你的操作。
扣子编程 OpenAPI 目前支持的鉴权方式如下。
| 访问密钥类型 | 鉴权方式 | 说明 | 示例文件 |
|---|---|---|---|
| 个人访问密钥(PAT) | 个人访问密钥(PAT) | Personal Access Token,简称 PAT。扣子编程中生成的个人访问令牌。PAT 生成与使用便捷,适用于测试环境调试等场景。每个令牌可以关联多个空间,并开通指定的接口权限。生成方式可参考添加个人访问令牌。 | auth/auth-pat.ts |
|
服务访问令牌(SAT) |
服务访问令牌(SAT) |
Service Access Token(简称 SAT)是以服务身份创建的访问凭证,可长期有效访问扣子资源,通常用于服务/应用程序的身份验证和授权。生成方式可参考添加服务访问令牌。 SAT 的示例代码与 PAT 通用,可直接参考 PAT 的示例文件。 |
|
|
OAuth 认证 |
授权码授权 ( Authorization Code Flow) |
适用于有显著前后端之分的应用程序授权场景。其中前端模块负责与用户交互,后端服务处理前端请求,与扣子编程授权服务器和 OpenAPI 交互。 |
|
|
PKCE 授权 ( Authorization Code Flow with PKCE) |
应用程序无后端服务,所有操作都发生在应用程序的前端。 |
||
|
设备码授权 ( Device Code Flow) |
应用程序无后端服务,所有操作都发生在应用程序的 Command Line,且 Command Line 无法提供“同意授权”的操作。 |
||
|
JWT 授权 ( JWT Flow) |
应用程序服务端直接调用扣子编程 OpenAPI。 应用程序后端服务代理应用程序自己的用户获取身份凭据,应用程序用户基于凭据直接访问 OpenAPI。 |
如果选择使用个人访问密钥鉴权,需要先申请一个个人访问密钥,并添加指定空间和权限。操作步骤可参考添加个人访问令牌。
建议通过环境变量的方式管理访问密钥,避免在代码中通过硬编码方式进行编程,以免密钥泄露、引发安全风险。配置环境变量之后,可以在不修改代码的情况下,将动态的鉴权参数传递到对应的函数,实现便捷安全的身份认证。
使用个人访问密钥:
COZE_API_TOKEN 是在扣子编程中申请的个人访问密钥。
export COZE_API_TOKEN=pat_****
import { CozeAPI, COZE_CN_BASE_URL } from '@coze/api';
// Import token using the environment variable
const token = process.env.COZE_API_TOKEN || "input your coze api token"
// Create a client instance
const client = new CozeAPI({
baseURL: COZE_CN_BASE_URL, //扣子 OpenAPI 的 Endpoint。
token: token, //扣子个人访问令牌。
});
import { CozeAPI, COZE_CN_BASE_URL } from '@coze/api';
// Import token using the environment variable
const token = process.env.COZE_API_TOKEN || "input your coze api token"
// Access the coze.com service
const client = new CozeAPI({
baseURL: COZE_CN_BASE_URL,
token: token,
allowPersonalAccessTokenInBrowser: true, // Allow the browers to use PAT
});
如果选择使用 OAuth 授权码方式完成授权,可参考以下流程及示例代码。
// 导入扣子API工具:授权URL生成、token获取、刷新等方法
import {
CozeAPI,
getWebAuthenticationUrl, // 生成授权页面URL的工具函数
getWebOAuthToken, // 用授权码换token的工具函数
refreshOAuthToken, // 刷新token的工具函数
COZE_CN_BASE_URL
} from '@coze/api';
// 从环境变量获取OAuth应用参数
const clientId = process.env.COZE_CLIENT_ID; // OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
const clientSecret = process.env.COZE_CLIENT_SECRET; // 客户端密钥,请妥善保管该密钥。
const redirectUrl = process.env.COZE_REDIRECT_URL; // 重定向地址,创建 OAuth 应用时指定的重定向 URL。
const baseURL = COZE_CN_BASE_URL; // 扣子 OpenAPI 的 Endpoint。
// Generate the authentication URL using the provided parameters
const authUrl = getWebAuthenticationUrl({
clientId,
redirectUrl,
baseURL,
state: '123', // Set a state parameter for user data
});
// Get the authorization code from url query
const code = await getCodeFromQuery();
console.log('Received code:', code);
// Exchange the authorization code for an OAuth token
const oauthToken = await getWebOAuthToken({
clientId, // OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
clientSecret, // 客户端密钥,请妥善保管该密钥。
redirectUrl, // 重定向地址,创建 OAuth 应用时指定的重定向 URL。
baseURL, // 扣子 OpenAPI 的 Endpoint。
code,
});
// Initialize a new Coze API client using the obtained access token
const client = new CozeAPI({
baseURL,
token: oauthToken.access_token,
});
// Refresh the OAuth token using the refresh token obtained earlier
const refreshedOAuthToken = await refreshOAuthToken({
clientId,
refreshToken: oauthToken.refresh_token,
clientSecret,
baseURL,
});
如果选择使用 OAuth PKCE 方式完成授权,可参考以下流程及示例代码。
// 导入PKCE相关工具
import {
CozeAPI,
getPKCEAuthenticationUrl, // 生成PKCE授权URL和codeVerifier
getPKCEOAuthToken, // 用授权码和codeVerifier换取token
refreshOAuthToken, // 刷新token
COZE_CN_BASE_URL,
} from '@coze/api';
const clientId = process.env.COZE_CLIENT_ID; //OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
const redirectUrl = process.env.COZE_REDIRECT_URL; //重定向地址,创建 OAuth 应用时指定的重定向 URL。
const baseURL = COZE_CN_BASE_URL; //扣子 OpenAPI 的 Endpoint。
code_verifier,并根据指定算法将其转换为 code_challenge,算法通常使用 SHA-256 算法。然后基于回调地址、code_challenge 和 code_challenge_method,生成一个授权链接。
// Generate the PKCE authentication URL and code verifier
const { url, codeVerifier } = await getPKCEAuthenticationUrl({
clientId,
redirectUrl,
baseURL,
state: '123', // Set a state parameter for user data
});
// Get the authorization code from url query
const code = await getCodeFromQuery();
console.log('Received code:', code);
// Exchange the authorization code for an OAuth token using PKCE
const oauthToken = await getPKCEOAuthToken({
clientId, //OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
redirectUrl, //重定向地址,创建 OAuth 应用时指定的重定向 URL。
baseURL, //扣子 OpenAPI 的 Endpoint。
code, // 获取的授权码。
codeVerifier, // 应用程序生成的临时密钥,应用程序通过临时密钥和授权码获取 OAuth 访问令牌。
});
// Initialize a new Coze API client using the obtained access token
const client = new CozeAPI({
baseURL,
token: oauthToken.access_token,
});
// Example of how to use the client (commented out)
// e.g. client.chat.stream(...);
// Refresh the OAuth token using the refresh token obtained earlier
const refreshedOAuthToken = await refreshOAuthToken({
clientId,
refreshToken: oauthToken.refresh_token,
baseURL,
});
如果选择使用 OAuth 设备码方式完成授权,可参考以下流程及示例代码。
import { APIError, CozeAPI, getDeviceCode, getDeviceToken, COZE_CN_BASE_URL } from '@coze/api';
const clientId = process.env.COZE_CLIENT_ID; //OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
const baseURL = COZE_CN_BASE_URL;
user_code 和 device_code。通过 user_code 生成授权链接,并引导用户打开该链接、填写 user_code、同意授权。应用程序调用扣子 OpenAPI,通过 device_code 生成访问密钥。// Get the device code
const deviceCode = await getDeviceCode({
baseURL,
clientId,
});
// Instruct the user to visit the verification URI and enter the user code
console.log(
`please open ${deviceCode.verification_uri} and input the code ${deviceCode.user_code}`,
);
device_code 来轮询扣子 OpenAPI 以获取访问密钥,接口已经做了封装,设置 poll = true 即可。
const deviceToken = await getDeviceToken({
baseURL,
clientId,
deviceCode: deviceCode.device_code,
poll: true,
});
// Refresh the access token if it expires
const refreshToken = deviceToken.refresh_token;
const refreshTokenResult = await refreshOAuthToken({
baseURL,
clientId,
refreshToken,
});
如果选择使用 OAuth JWT 方式完成授权,可参考以下流程及示例代码。
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
import fs from 'fs';
import jwt from 'jsonwebtoken';
import { CozeAPI, getJWTToken, COZE_CN_BASE_URL } from '@coze/api';
const baseURL = COZE_CN_BASE_URL;
const appId = process.env.COZE_APP_ID; //OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
const keyid = process.env.COZE_KEY_ID; //OAuth 应用的公钥指纹,可以在 OAuth 应用页面找到这个应用,在操作列单击编辑图标,进入配置页面查看公钥指纹。
const aud = process.env.COZE_AUD; //扣子 API 的 Endpoint,即 api.coze.cn。
// Read the private key from a file
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const privateKey = fs
.readFileSync(join(__dirname, '../../tmp/private_key.pem'))
.toString();
const result = await getJWTToken({
baseURL, //扣子 OpenAPI 的 Endpoint。
appId, //OAuth应用的客户端ID,创建 OAuth 应用时获取的客户端 ID。
aud, //扣子 API 的 Endpoint,即 api.coze.cn。
keyid, //OAuth 应用的公钥指纹。
privateKey, // 用于签署 JWT 的本地私钥。
});
console.log('getJWTToken', result);
// Initialize a new Coze API client using the obtained access token
const client = new CozeAPI({ baseURL, token: result.access_token });
// Example of how to use the client (commented out)
// e.g. client.chat.stream(...);