- Webhook管理
秘钥
对于设置了秘钥的 Webhook,DM Hub 向消息接收地址发送请求时,会使用秘钥生成消息内容的 hmac sha256 hex 摘要签名,携带在 header 的 X-Clab-Hmac-Signature 中。
在接收消息的代码中,使用相同的秘钥生成接收到的 payload 的 hmac sha256 hex 摘要签名,并与 header 中的签名进行比对,如果两者一致,则验签通过,表明消息来源可靠且消息内容没有被篡改过。
生成 hmac sha256 hex 摘要签名: 使用的 jar 包:
com.google.code.gson:gson:2.8.1
commons-codec:commons-codec:1.10
生成签名代码示例:
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import org.apache.commons.codec.digest.HmacUtils
String sign(Map payload, String secret) {
Gson gson = new GsonBuilder().create();
String str = gson.toJson(payload);
return HmacUtils.hmacSha256Hex(secret, str.replaceAll("\\s+", ""));
}
基本认证
对于设置了基本身份认证的 Webhook, DM Hub向消息地址发送请求时,会在HTTP header中添加Authorization请求头。示例代码如下:
String content = username + ":" + password;
String token = "Basic " + Base64.getEncoder().encodeToString(content("utf-8"));
httpPost.setHeader("Authorization", token);
接收Webhook消息的服务可以用相同的方法验证请求的完整性。
OAuth2
对于设置了OAuth2认证的 Webhook, DM Hub首先会向token获取地址请求并获取access_token,然后携带access_token参数向消息接收地址发送消息。
- 获取token的方式如下:
GET https://{token获取地址}?appid={appid}&secret={secret}&grant_type=client_credentials
- 发送消息时的参数名为access_token,如:
POST https://{消息接收地址}
不使用任何鉴权方式
如果Webhook鉴权设置无,则不做任何鉴权,直接访问接受消息地址