设置X.Reach & Re.Boost回调地址
如果你想要接入开放平台的回调,你需要在Dashboard后台-开发配置
中设置X.Reach或Re.Boost回调地址来使用它们。
回调信息安全验证
请在回调请求的Header中验证数据是否篡改及请求是否有效,验证的方式如下:
注: md5为小写32位
- 请求方法:POST
- 请求认证:Authorization: Bearer md5(OpenSecret+(空格)+md5(请求body))
- 内容类型:application/json
下面是服务器验证回调是否安全的参考示例:
Node
const http = require('http');
const crypto = require('crypto');
// 定义OpenSecret
const OpenSecret = 'your_open_secret';
// 创建HTTP服务器
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
// 接收请求体数据
req.on('data', (chunk) => {
body += chunk.toString();
});
// 请求体接收完毕
req.on('end', () => {
// 获取Authorization头中的Bearer值
const authHeader = req.headers['authorization'];
if (!authHeader || !authHeader.startsWith('Bearer ')) {
res.statusCode = 401;
res.end('Unauthorized: Missing or invalid Authorization header');
return;
}
const bearerToken = authHeader.split(' ')[1]; // 提取Bearer的值
// 计算请求体的MD5哈希值
const bodyMD5 = crypto.createHash('md5').update(body).digest('hex');
// 计算md5(OpenSecret + ' ' + md5(请求body))
const expectedToken = crypto
.createHash('md5')
.update(OpenSecret + ' ' + bodyMD5)
.digest('hex');
// 验证Bearer的值是否等于计算的值
if (bearerToken === expectedToken) {
res.statusCode = 200;
res.end('Verification successful: Token is valid');
} else {
res.statusCode = 401;
res.end('Unauthorized: Token verification failed');
}
});
} else {
res.statusCode = 405;
res.end('Method Not Allowed');
}
});
// 启动服务器
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});