全部产品

消息通知功能说明

更新时间:2018-02-28 17:59:03

启用媒体处理消息通知功能步骤

  1. 激活媒体处理消息通知功能。

    媒体处理通过 MNS 实现转码作业及模版分析作业结束时的消息通知功能,因此激活此功能请先 开通MNS服务

  2. 创建 MNS 通知主题。

    登录 MNS 控制台(选择与媒体处理服务相同地域)> 发布订阅 > 创建主题 以创建消息主题;然后在主题的订阅详情中设定订阅消息的HTTP地址;

    详情参见 消息服务 > 用户指南 > 控制台操作指南 > 主题使用帮助

    订阅消息的HTTP地址

    HTTP地址仅指定域名或IP地址(可设定自定义Web服务端口),实际消息推送至 Web服务的 /notifications 。

    取消接收消息的HTTP地址强制为 “Web服务的 /notifications路径”的限制,支持用户自行设定接收消息的Web服务的路径

  3. 在转码管道上绑定消息主题。

    登录 媒体处理控制台 > 全局设置 > 管道,在管道上关联消息通知主题。

消息通知功能接收消息服务搭建

MNS通过发送POST请求将消息推送到指定接收消息的HTTP地址。

  1. 消息推送请求格式。

    Request的构造主要由以下几个部分组成:

    • 请求行

      POST /notifications HTTP/1.1

    • URI参数

    • Request Header

      参数名称

      说明

      备注

      Authorization

      验证字符串,可由此判断跟请求是否是由MNS发出

       

      Content-Length

      HTTP消息体的长度

       

      Content-Type

      请求内容的MIME类型,目前请求仅支持text/xml;charset=utf-8格式

       

      Content-MD5

      HTTP消息体的MD5值

       

      Date

      请求的构造时间,目前只支持GMT格式,如果和MNS的服务器时间前后差异超过15分钟将返回本次请求非法。

       

      Host

      接受消息的Http服务端的域名

      HTTP/1.1

      x-mns-request-id

      此次推送的Request编号

       

      x-mns-version

      调用MNS接口的版本号,当前版本为“2015-06-06”

       

      x-mns-signing-cert-url

      签名证书的地址(Base64编码过)

      签名证书的地址Request Body 中的SigningCertURL字段在2016年6月30日后将不再提供。

    • Request Body

      Request Body为XML格式,包括创建消息正文和属性。

      参数名称

      说明

      TopicOwner

      被订阅主题的拥有者

      TopicName

      被订阅主题的名字

      Subscriber

      订阅者

      SubscriptionName

      订阅名称

      MessageId

      消息编号

      Message

      消息正文

      MessageMD5

      消息的MD5

      MessagePublishTime

      消息发布的时间

      SigningCertURL

      签名证书的地址,2016年6月30日后将仅在Request Header中通过x-mns-signing-cert-url提供。

    • Response

      返回消息由返回状态行,HTTP头和消息体三部分组成

    • HTTP Status Code

      HTTP/1.1 204 NoContent

      若确认成功,返回204。

      若请求签名认证不过,返回403。

      若任何其他错误,返回500。

    • Response Header

    • Response Body

    • Special Error

    请求示例:

    POST /notifications HTTP/1.1

    Host: example.com

    Date: Wed, 08 Mar 2012 12:00:00 GMT

    Content-Length: 300

    Content-Type: text/xml;charset=utf-8

    Content-MD5: YjJjYzgxYzkxODU4NDI0ODJiYTVlNjQ4MmM0MjZiYjY=

    Authorization:MNS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU=

    User-Agent: Aliyun Notification Service Agent

    x-mns-request-id:512B2A634403E52B1956133K

    x-mns-version:2015-06-06

      

    $TopicOwner

    $TopicName

    $Subscriber

    $SubscriptionName

    $MessageId

    $Message

    $MessageMD5

    $MessagePublishTime

    http://ns.aliyun-inc.com/NS-f3ecfb7296de52f.pem

    媒体处理消息通知消息体 > Message 结构说明:

    参数名称

    说明

    jobId

    作业ID

    type

    作业类型,值为Transcode、Analysis、Snapshot

    state

    作业状态,值为Success、Fail

    消息示例:

    POST /notifications HTTP/1.1

    Authorization: dOcgxcXsDU3m6SUHCW/5Ft4yRbzVjrMbhbcQiHeXIg5iLRnI//YhPVvzUY3wTnXikafxnn+UrEC+/vX0FwKnLg==

    Content-Length: 643

    Content-md5: NjJhMzY0MGM2Y2YxY2RkOTdhZDdlMjUwMjc4MzBiOTY=

    Content-Type: text/xml;charset=utf-8

    Date: Tue, 22 Sep 2015 03:25:32 GMT

    Host: internal.mns.cn-hangzhou.aliyuncs.com:8068

    User-Agent: Aliyun Notification Service Agent

    x-mns-request-id: 5600CA2B3728290806000010

    x-mns-version: 2015-06-06

     

     

      40000

      mts-test

      44404

      mts-user-notify

      52DD3925C2AA589F-1-14FF315BB69-200000003

      928EC0A38F2D6BAA0767C0917C1C1C89

    {“jobId”:”8a8753a54e6a4a0f9128ccecbefe9948”,”state”:”Success”,”type”:”Transcode”}

      1442892331881

    http://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem

    返回头示例:

    HTTP/1.1 204 NoContent

  2. 接收消息服务端对消息推送请求的签名认证。

    HTTP的消息接收地址,用户可以通过SigningCerURL获取签名证书(推送消息的请求中都会携带),并根据相应的方法来验证该请求是否由MNS系统发出,防止恶意请求对用户造成负面影响。

    SigningCerURL:描述了用户提取验证请求是否来自MNS的签名证书的地址。

    HTTP的消息接收地址对应的HTTP Server对请求的合法性进行验证的方法如下:在请求的Header中,Authorization字段的值是MNS根据待签名字符串,用SHA1-RSA签名算法生成签名。用户可以使用公钥对签名进行验证。具体的验证方法如下。

    1. 获取X509证书。

      在MNS发送给消息接收地址对应的HTTP Server的XML格式的Request Body中,SigningCertURL指定了签名证书的地址。用户需要获取该签名文件,从中提取出签名的公钥。

    2. 计算待签名字符串。

      VERB + “\n”

                   + CONTENT-MD5 + “\n”

                   + CONTENT-TYPE + “\n”

                   + DATE + “\n”

                   + CanonicalizedMNSHeaders

                   + CanonicalizedResource

      • VERB表示HTTP的Method。
      • Content-Md5表示请求内容数据的MD5值。
      • CONTENT-TYPE表示请求内容的类型。
      • DATE表示此次操作的时间,不能为空,目前只支持GMT格式,如果请求时间和MNS服务器时间相差超过15分钟,MNS会判定此请求不合法,返回400。
      • CanonicalizedMNSHeaders表示http中的x-mns-开始的字段组合。
      • CanonicalizedResource表示http请求的相对地址,不能为空。
      • 采用SHA1算法对待签名字符串进行哈希。请按照RFC3447中的SHA1算法对待签名字符串做哈希运算。
    3. 解码。

      • 对Authorization签名字段Base64解码。Authorization签名字段采用Base64编码方式进行编码,在对比签名前,需要对其进行Base64解码。

      • 用公钥对Authorization签名进行解码。Authorization签名经过Base64 Decode后,再用从X509证书中提取的公钥对其进行解密。

    4. 比较第二、三两步的结果是否一致。如果一致,则表明请求来自MNS,访问合法。

    其他:

    • 用来签名的字符串为utf-8格式。

    • 签名的方法用 RFC 3447RFC 3447 中定义的sha1WithRSAEncryption方法。

    • base64是指使用base64算法转码文本。

    附:

    HTTP的消息接收服务 Java 实现示例