跳到主要内容

获取 Token

以 openapi 授权方式获取用户 Access Token,供直接 V1 / V2 接口使用。

项目内容
方法POST
路径/auth/oauth2/token
完整示例地址https://admin.duoge.work/api/auth/oauth2/token
请求格式application/x-www-form-urlencoded

先阅读生成签名,下方 JavaScript 示例复用该页的 sign 函数。API 基础地址环境变量填入 https://admin.duoge.work/api 或管理员交付的部署地址。

请求参数与调用​

接口为 POST /auth/oauth2/token,使用 application/x-www-form-urlencoded。普通业务接口的 JSON 要求不能套用到这个请求。

位置参数说明
HeaderTENANT-ID数字租户 ID
HeaderContent-Typeapplication/x-www-form-urlencoded
表单grant_type固定 openapi
表单username获授权的用户名
表单app_id应用 ID
表单timestamp当前毫秒时间戳
表单client_id、client_secret当前部署的认证客户端配置
表单access_id当前授权的访问 ID,提供时按它匹配密钥
表单signature上述实际表单参数的签名

示例接续上面的 sign 函数,环境变量由调用服务注入:

const params = {
grant_type: 'openapi',
username: process.env.DUOGEX_USERNAME,
app_id: process.env.DUOGEX_APPLICATION_ID,
timestamp: String(Date.now()),
client_id: process.env.DUOGEX_CLIENT_ID,
client_secret: process.env.DUOGEX_CLIENT_SECRET,
access_id: process.env.DUOGEX_ACCESS_ID,
};
const body = new URLSearchParams({
...params,
signature: sign(params, process.env.DUOGEX_ACCESS_SECRET),
});
const response = await fetch(`${process.env.DUOGEX_API_BASE}/auth/oauth2/token`, {
method: 'POST',
headers: {
'TENANT-ID': process.env.DUOGEX_TENANT_ID,
'Content-Type': 'application/x-www-form-urlencoded',
},
body,
});
const result = await response.json();
if (!response.ok || !result.access_token) {
throw new Error('获取 Token 失败,请核对业务错误与授权配置');
}
// 将令牌保存在服务端,按实际 expires_in 管理有效期。

运行前必须配置示例中的全部环境变量。页面有历史客户端默认值,正式接入应使用管理员确认的当前配置,不将默认值当作已授权凭据。页面响应示例为 43200 秒,有效期仍按真实响应管理。

返回说明​

字段说明
access_token用户访问令牌,后续放入 Authorization: Bearer
token_type返回的令牌类型
expires_in实际有效秒数,不写死 12 小时

HTTP 成功且 access_token 非空后才保存令牌;失败时读取返回的错误说明。令牌应保存在服务端,按实际有效期更新,不放入公开前端代码或日志。

接着读取应用信息和应用表单信息,再调用V1 分页查询。Basic 网关和匿名分享采用各自认证方式,不把此 Token 当作分享 Token。