教育号的事件通通知机制


当教育号的通讯录、应用和消息等数据或状态发生变化时,会触发相关的事件,并通过回调机制将事件通知到第三方应用。
关于事件通知的详情可参考文档:

搭建回调服务来处理来自教育号的事件通知


如果第三方应用的业务场景需要关注并实时获取到上述变更的内容,则需先搭建好回调服务,接收教育号的事件通知并进行处理。

如何配置回调服务


配置回调服务,需要有三个配置项,分别是:URL, Token, EncodingAESKey。其中 URL 由开发者在应用接入平台配置,Token 和 EncodingAESKey 在平台自动随机生成。

首先,URL 为回调服务地址,由开发者搭建,用于接收通知消息或者事件。其次,Token 用于计算签名,由英文或数字组成且长度不超过32位的自定义字符串。开发者提供的URL是公开可访问的,这就意味着拿到这个URL,就可以往该链接推送消息。

那么 URL 服务需要解决两个问题:

  • 如何分辨出是否为教育号来源
  • 如何分辨出推送消息的内容是否被篡改

通过数字签名就可以解决上述的问题。具体为:约定Token作为密钥,仅开发者和平台知道,在传输中不可见,用于参与签名计算。教育号在推送消息时,将消息内容与Token计算出签名。开发者接收到推送消息时,也按相同算法计算出签名。如果为同一签名,则可信任来源为教育号,并且内容是完整的。如果非教育号来源,由于攻击者没有正确的Token,无法算出正确的签名。如果消息内容被篡改,由于开发者会将接收的消息内容与Token重算一次签名,该值与参数的签名不一致,则会拒绝该请求。

最后,EncodingAESKey 用于消息内容加密,由英文或数字组成且长度为43位的自定义字符串。由于消息是在公开的因特网上传输,消息内容是可被截获的,如果内容未加密,则截获者可以直接阅读消息内容。若消息内容包含一些敏感信息,就非常危险了。EncodingAESKey就是在这个背景基础上提出,将发送的内容进行加密,并组装成一定格式后再发送。

回调服务的实现


回调服务需要支持接并处理收来自教育号的Http Post请求

1. 接收事件通知

假设接收消息的URL设置为 http://notifyurl.com
请求方式:POST
请求地址 :http://notifyurl.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323
请求体(xml格式):

<xml> 
   <ToUserName><![CDATA[toUser]]></ToUserName>
   <Encrypt><![CDATA[msg_encrypt]]></Encrypt>
</xml>

参数说明:

参数 类型 说明
msg_signature String 教育号加密签名,msg_signature 结合了开发者填写的 token、请求中的 timestamp、nonce 参数、加密的消息体
timestamp Integer 时间戳。与 nonce 结合使用,用于防止请求重放攻击。
nonce String 随机数。与 timestamp 结合使用,用于防止请求重放攻击。
ToUserName String 第三方应用回调该值为 SuiteId
Encrypt String 消息结构体加密后的字符串

2. 处理事件通知

开发者收到事件通知后,需要作如下处理:

  • 对 msg_signature 进行 校验
  • 解密 Encrypt,得到明文的消息结构体
  • 如果前两步正常,则返回字符串 "success"

具体加解密操作流程可以参考附录 加解密方案说明

© 1998 - 2021 Tencent Inc. All Rights Reserved all right reserved,powered by ePaaS.更新时间: 2024-03-04 10:24:47

results matching ""

    No results matching ""

    results matching ""

      No results matching ""