操作场景
该任务指导您使用 JavaScript 语言,通过应用认证来对您的 API 进行认证管理。
操作步骤
2. 将 API 所在服务发布至发布环境(参见 服务发布与下线)。
3. 在控制台 应用管理 界面创建应用。
4. 在应用列表中选中已经创建好的应用,单击绑定 API,选择服务和 API 后单击提交,即可将应用与 API 建立绑定关系。
5. 参见 示例代码,使用 JavaScript 语言生成签名内容。
环境依赖
API 网关提供 JSON 请求方式和 form 请求方式的示例代码,请您根据自己业务的实际情况合理选择。
注意事项
应用生命周期管理,以及 API 向应用授权、应用绑定 API 等操作请您参见 应用管理。
应用生成签名过程请您参见 应用认证方式。
示例代码
JSON 请求方式示例代码
const https = require("https");const crypto = require("crypto");// 应用 ApiAppKeyconst apiAppKey = "";// 应用 ApiAppSecretconst apiAppSecret = "";// 请求 hostconst hostname = "service-xxxxxxxxx.gz.apigw.tencentcs.com";// 端口号:https 对应 443,http 对应 80const port = 443;// 请求 pathconst path = "/test";// 请求方法const method = "POST";// const method = "GET";const dateTime = new Date().toUTCString();// 请求参数,注意:需要替换成真实参数const body = {arg1: "arg1",arg2: "arg2",};// 排序const sortedBodyStr = sortBody(body);const bodyJsonStr = JSON.stringify(body);// MD5需要包装一层base64const contentMD5 = Buffer.from(crypto.createHash("md5").update(bodyJsonStr, "utf8").digest("hex")).toString("base64");const options = {hostname,port,path: `${path}${method.toUpperCase() === "GET" ? `?${sortedBodyStr}` : ""}`,method,headers: {Accept: "application/json","Content-Type": "application/json","Content-MD5": contentMD5,"Content-Length": Buffer.byteLength(bodyJsonStr),"x-date": dateTime,},};const signingStr = [`x-date: ${dateTime}`,options.method,options.headers.Accept,options.headers["Content-Type"],contentMD5,options.path,].join("\\n");const signing = crypto.createHmac("sha1", apiAppSecret).update(signingStr, "utf8").digest("base64");const sign = `hmac id="${apiAppKey}", algorithm="hmac-sha1", headers="x-date", signature="${signing}"`;options.headers.Authorization = sign;// 发送请求const req = https.request(options, (res) => {console.log(`STATUS: ${res.statusCode}`);res.on("data", (chunk) => {console.log("BODY: " + chunk);});});req.on("error", (error) => {console.error(error);});req.write(bodyJsonStr);req.end();function sortBody(body) {// 按字典序排序const keys = Object.keys(body).sort();return keys.map((item) => {return `${item}=${body[item]}`;}).join("&");}
form 请求方式示例代码
const https = require("https");const crypto = require("crypto");// 应用 ApiAppKeyconst apiAppKey = "";// 应用 ApiAppSecretconst apiAppSecret = "";// 请求hostconst hostname = "service-0kd7h58k-xxxxxxx.gz.apigw.tencentcs.com";// 端口号:https 对应 443,http 对应 80const port = 443;// 请求 pathconst path = "/test";// 请求方法const method = "POST";// const method = "GET";const contentMD5 = "";const dateTime = new Date().toUTCString();// 请求参数const body = {arg1: "arg1",arg2: "arg2",};// 排序const sortedBodyStr = sortBody(body);const options = {hostname,port,path: `${path}${method.toUpperCase() === "GET" ? `?${sortedBodyStr}` : ""}`,method,headers: {Accept: "application/json","Content-Type": "application/x-www-form-urlencoded","x-date": dateTime,},};const signingStr = [`x-date: ${dateTime}`,options.method,options.headers.Accept,options.headers["Content-Type"],contentMD5,options.path,].join("\\n");const signing = crypto.createHmac("sha1", apiAppSecret).update(signingStr, "utf8").digest("base64");const sign = `hmac id="${apiAppKey}", algorithm="hmac-sha1", headers="x-date", signature="${signing}"`;options.headers.Authorization = sign;// 发送请求const req = https.request(options, (res) => {console.log(`STATUS: ${res.statusCode}`);res.on("data", (chunk) => {console.log("BODY: " + chunk);});});req.on("error", (error) => {console.error(error);});req.write(sortedBodyStr);req.end();function sortBody(body) {// 按字典序排序const keys = Object.keys(body).sort();return keys.map((item) => {return `${item}=${body[item]}`;}).join("&");}