更新时间:2021-01-08 19:18
为了提高 MPS 与用户系统之间的交互的安全性,MPS 会对所有的服务端接口进行加签与验证,并且提供了密钥管理界面,供您进行密钥配置。
推送 API 接口配置
MPS 提供 REST 接口供您调用。为确保安全性,MPS 需要对调用者的身份进行验证。在调用 API 之前,您需要使用 RSA 算法,对请求进行签名,并在消息推送的控制台的 密钥管理 界面上的 推送 API 接口配置 区域内,配置密钥,供 MPS 验证调用者身份所用。
推送回调接口配置
若您需要获取消息下发结果的回执,则需要在 控制台 密钥管理 页面上的 推送回调接口配置 区域中,配置 MPS 回调时用到的 REST 接口地址,并获取公钥。MPS 在回调用户接口时,会对请求参数进行签名。您需要使用获取的公钥,对请求进行验签,以验证是否为 MPS 回调。
进行推送 API 接口配置时,您需要先使用 RSA 算法生成 2048 位公钥。
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
+
替换为 -
,/
替换为 -
,得到最终签名结果。登录 mPaaS 控制台,选择 App,通过以下步骤,配置推送接口:
点击 推送 API 接口配置 区域右上角的 配置,页面上展示配置入口,如下图所示。
字段 | 是否必填 | 说明 |
---|---|---|
状态 | 是 | 推送接口的可调用状态。打开开关,即可调用MPS 提供的接口;关闭开关,则不能调用 MPS 提供的接口。 |
调用接口加密方式 | 否 | 仅可选 RSA 算法。 |
RSA 算法公钥 | 否 | 填写 2048 位公钥。 使用私钥对请求参数进行签名后,MPS 使用公钥对签名后的请求参数进行解密,验证调用者身份。 |
登录 mPaaS 控制台,选择 App,通过以下步骤,配置推送回调接口:
点击 推送回调接口配置 区域右上角的 配置,页面上展示配置入口,如下图所示。
字段 | 是否必填 | 说明 |
---|---|---|
状态 | 是 | 回调状态。打开开关,移动推送核心将根据配置,给用户服务端回执;关闭开关,移动推送核心将不给用户服务端回执。 |
回调接口 URL 地址 | 是 | 填写回调接口地址,应为公网可访问的 HTTP 请求地址。MPS 对 POST 请求体以私钥进行签名,将签名后的内容作为 sign 参数进行回调。 |
回调接口加密方式 | 否 | MPS 使用 RSA 算法对 POST 请求体进行签名。 |
RSA 算法公钥 | 否 | 系统自动填写,您无法修改。用户服务端获取 POST 请求体和 sign 参数后,使用公钥验证是否为 MPS 请求,确保数据传输过程中未被篡改,关于回调验签的说明,参见 API 参考 > HTTP 调用。 |
/**
* Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
*/
package com.callback.demo.callbackdemo;
import com.callback.demo.callbackdemo.util.SignUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
*
* @author yqj
* @version $Id: PushCallbackController.java, v 0.1 2020年03月22日 11:20 AM yqj Exp $
*/
@Controller
public class PushCallbackController {
/**
* 拷贝控制台中推送回调接口配置的RSA 算法公钥
*/
private static final String pubKey = "";
@RequestMapping(value = "/push/callback" ,method = RequestMethod.POST)
public void callback(@RequestBody String callbackJson, @RequestParam String sign) {
System.out.println(sign);
//验签
sign = sign.replace('-','+');
sign = sign.replace('_','/');
if(!SignUtil.check(callbackJson,sign,pubKey,"UTF-8")){
System.out.println("验签失败");
return;
}
System.out.println("验签成功");
//json 消息体
System.out.println(callbackJson);
}
}
callbackJson
为消息请求体,为 JASON 格式,参考如下:
{
"extInfo":{
"adToken":"da64bc9d7d448684ebaeecfec473f612c57579008343a88d4dbdd145dad20e84",
"osType":"ios"
},
"msgId":"console_1584853300103",
"pushSuccess":true,
"statusCode":"2",
"statusDesc":"Acked",
"targetId":"da64bc9d7d448684ebaeecfec473f612c57579008343a88d4dbdd145dad20e84"
}
下表为 callbackJson
中各字段的说明。您可以通过此链接获取回调的 回调示例代码。
字段 | 说明 |
---|---|
msgId | 请求的业务消息 ID |
pushSuccess | 推送是否成功 |
statusCode | 消息状态码 |
statusDesc | 消息状态码对应的描述 |
targetId | 目标 ID |
在文档使用中是否遇到以下问题
更多建议
匿名提交