公司/教室/企业设置 - Webhooks
仅适用于
管理员可以使用 Webhook 检查数据访问完整性,确保 Onshape 确实已发送通知,并且在传输过程中未被篡改。启用 Webhook 基本身份验证会填充所有 Webhook 请求中的“授权”表头。
若要在 Onshape 中导航到您的“Webhooks”设置,请单击 Onshape 窗口右上角的帐户用户图标 ()。这将打开一个下拉菜单。单击“公司/教室/企业设置”。
在页面左侧的列表中单击“Webhook”:
管理员可以使用 Webhook 检查数据访问完整性,确保 Onshape 确实已发送通知,并且在传输过程中未被篡改。启用 Webhook 基本的身份验证会填充所有 Webhook 请求中的“授权”表头。Webhook 签名会将 Webhook 配置为使用签名来抵御攻击。生成主要和辅助密钥以在生产应用程序中轮换密钥。这使管理员可以弃用或交换密钥,而无需中断当前连接。如果任一密钥匹配,Onshape 即会将其视为有效。复制到剪贴板会将相关密钥发送至剪贴板。重置会从相关输入框中删除密钥。生成主要密钥后,单击保存更改可接受相关输入内容。
管理员应确保所有 Webhook 均位于安全的端点位置 (https),因为该数据未经过加密。
可使用以下结构按 Webhook 目标匹配签名值:
Signature = <Base64<HMAC256-digest<<timestamp header value>.<webhook payload>>>
Onshape Webhook 包含以下附加表头:
-
X-onshape-webhook-timestamp - 指示何时发送 Webhook 的时间戳
-
X-onshape-webhook-signature-primary - 如果在公司设置中指定了主要签名密钥,则会出现
-
X-onshape-webhook-signature-secondary - 如果在公司设置中指定了辅助签名密钥,则会出现
JAVA
void matchSignatureHeader(String messageBody, String timestamp, String signatureKey, String signature) throws Exception {
String payload = timestamp + "." + messageBody;
String algorithm = "HmacSHA256";
Mac mac = Mac.getInstance(algorithm);
mac.init(new SecretKeySpec(signatureKey.getBytes(), algorithm));
byte[] payloadBytes = mac.doFinal(payload.getBytes());
Assert.assertArrayEquals(payloadBytes, Base64.decodeBase64(signature.getBytes()));
}
NODE.JS
const crypto = require('crypto');
……
var signatureKey; // The primary or secondary key
var message = timestampHeader + "." + rawPayload; // The timestamp header and the webhook payload
var hashValue = crypto.createHmac('SHA256', signatureKey).update(message).digest('base64');
if (hashValue === signatureHeader) { // signatureHeader is the primary or secondary signature header received with the webhook
// Signatures match
}