PublicAPI鉴权示例|飞书低代码平台 - 飞书官网

PublicAPI鉴权示例|飞书低代码平台

飞书

函数发布为 Public API 后若需要设置鉴权,可采用以下「数字签名鉴权」的方式。​
鉴权逻辑​
  • 用户在客户端对其 API 请求进行签名(通过「约定的密钥」和一定的「规则」生成数字签名),并通过请求 Header 的 Authorization 传输该签名。​
  • 服务端通过「约定的密钥」及相同的「规则」计算数字签名,并同请求 Header Authorization 中获取的数字签名进行比对,判断是否鉴权通过。​
​
​
250px|700px|reset
image.png
​
​
签名字符串生成规则​
将 JSON 类型的请求参数(key-value 类型的需转换为 JSON 类型)直接转换为 JSON 字符串。​
数字签名生成规则​
将「签名字符串」与约定的「密钥字符串」按签名字符串在左、密钥字符串在右的顺序拼接,然后再将拼接好的字符串通过 MD5 算法加密,即得到「数字签名」。​
公式表示为: Signature = MD5(SignString + Secret) ​
  • SignString :通过请求参数生成的「签名字符串」。​
  • Secret:约定的密钥字符串。​
  • MD5():MD5 哈希加密算法。​
示例代码​
需手动安装并引入 NPM 依赖(为完成加密,示例中使用的是 md5@2.3.0 包)。​
​
​
// 通过 NPM dependencies 成功安装 NPM 包后此处可引入使用​
// 如安装 linq 包后就可以引入并使用这个包​
// const linq = require('linq');​
const md5 = require('md5');​
/**​
* @param params 自定义参数​
* @param {Context} context 上下文参数,可通过此参数下钻获取上下文变量信息​
* @param {Logger} logger 日志记录器​
*​
* @return 函数的返回数据​
*​
* 快速入门:https://bytedance.feishu.cn/docs/doccnZQmpWJuQYviJ7mG1zKNI4g​
* Public API 鉴权示例:https://bytedance.feishu.cn/docs/doccn0pztfJ71ndMDnCLVRrpKlb#​
*/​
module.exports = async function (params, context, logger) {​
// 日志功能​
logger.info(`${new Date()} 函数开始执行`);​
​
// 利用约定的密钥生成的数字签名鉴权​
const accessSecret = kunlun.getVar('accessSecret'); // 约定的密钥,推荐存储在全局变量中,如示例中存储在了某 key 为 accessSecret 的全局变量中​
// 对 key 进行排序,避免 parmas 内部键值对顺序不一致带来的鉴权失败问题​
let obj = {};​
Object.keys(params).sort().forEach(k => {​
obj[k] = params[k]​
}); ​
​
const signature = md5(JSON.stringify(obj) + accessSecret); // 计算数字签名​
​
if (signature !== context.headers['authorization']) { // 当请求中传输的数字签名不合规时鉴权失败​
return { ​
"code": "-1", // 返回业务错误码​
"msg": "Authentication failed." // 返回业务错误信息​
}​
}​
​
// 在这里补充业务代码​
// 典型场景示例代码可参考 https://bytedance.feishu.cn/docs/doccnI20Snt1zFr77jemjmHHFDc​
​
} ​
​
​
预约飞书企业效能顾问 深度诊断企业痛点,定制专属 AI 办公方案

字节跳动旗下 AI 工作平台

关联文章推荐

优质内容,精华实践

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题

字节跳动旗下 AI 工作平台

联系我们立即试用