ATS用户中心
所有文章
系统应用
升级公告
常见问题
公开课
校招专栏
内推和门店
数据平台
亮点功能
热门活动
API文档
时间字段格式说明(Date)
API开发指南(Guide)
公共API
招聘官网API
企业信息API
门店API
组织架构API
职责API
用户API
招聘需求 API
候选人API
人才库API
职位API
面试API
Offer API
入职API
内推账户API
猎头API
BI报表API
district code
错误码
webhooks的安全保障(HTTP RESTful方式)
最后更新于 2024/11/06   阅读数 22

我们只支持HTTPS endpoint

由于Moka需要发送一些候选人信息到外部,其中可能包含敏感信息,我们要确保所有信息都是加密过的。虽然要求是HTTPS的endpoint,但是我们并不会去向CA验证证书的有效性,所以你可以提供self-signed证书。关于如何创建并使用self-signed证书。

签名验证

```javascript import crypto from 'crypto';

/** * @description body签名 * @description 加密方式 HamcSha256 * @description 加密结果为16进制 * @param {Object} body 接口参数 * @param {String} signKey 加密使用的key */ function validateWebhook(body, signKey) { const signStr = JSON.stringify(body); console.log('sha256 signStr:', signStr);// sha256 signStr: {"name":"test","email":"test@mokahr.com"} const sign = crypto.createHmac('sha256', signKey).update(signStr).digest('hex');
console.log('sha256 sign:', sign);// sha256 sign: 7d6981ccf0d789e29e4f5940fe9a7e9385d8a211ad44ecaaba335fb14dd2a32d } const body = { name: 'test', email: 'test@mokahr.com', } const signKey = 'qwer';

validateWebhook(body, signKey); ```

我们通过对请求body签名的方式来确保请求来源的真实性(authentication,即请求来源于Moka)。签名生成的signature会被放置于请求url的query中随着请求内

容一起发送。请求URL如:

https://your-endpoint.com/moka?sign=d23da96c279366d66e2780d300d9b09d6b0ec09efbbe2c3fd84980d981e4b41a

验证方面,需要你用signing key作为密钥、请求body作为内容,通过HMAC-SHA256来计算得出结果,并与请求URL中的signature进行比较。




数据加密

如果您对数据的安全性要求更高,可以选择对传输的数据进行加密。我们的加密算法采用AES-256,16进制,加密模式为CBC。 我们只会对body中的data字段进行加密,不包括id,event,triggeredAt等字段。 如果需要数据加密,请联系与您企业对接的客户成功经理进行开通,并设置加密密钥。 加密密钥请妥善保存,如泄漏请及时联系我们进行处理。

签名验证

数据加密解密

import crypto from 'crypto';
/** * 数据加密 * @param {Object} data 需要加密的数据 * @param {String} signKey 加密的key值 * @param {String} signIv 初始化向量 * * @return {String} enciphered result */
function dataEncrypt(data, signKey, signIv) {
  const signStr = JSON.stringify(data);
  const cipher = crypto.createCipheriv('aes-256-cbc', signKey, signIv);
  let result = cipher.update(signStr, 'utf8', 'hex');
  result += cipher.final('hex');
  return result;
}
/** * 数据解密 * @param {String} signStr 需要解密的数据 * @param {String} signKey 解密的key值 * @param {String} signIv 初始化向量 * * @return {String} deciphered result */
function dataDecrypt(signStr, signKey, signIv) {
  const cipher = crypto.createDecipheriv('aes-256-cbc', signKey, signIv);
  let result = cipher.update(signStr, 'utf8', 'hex');
  result += cipher.final('hex');
  return result;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
plaintext
未能解决您的问题?请联系
本篇目录

我们只支持HTTPS endpoint

签名验证

数据加密

签名验证

数据加密解密