深信服aTrust作为下一代的远程办公接入解决方案,同样集成了短信接口集成的功能,由于我们的客户只有短信宝的短信接口,网络上也搜不到响应的对接方案,经过我们工程师的尝试,按以下步骤操作即可完成短信接口的对接,在此之前请确认aTrust可以访问互联网并配置了DNS服务器。
首先我们要参考所使用的短信接口调用规则:https://www.smsbao.com/openapi/213.html,可以发现调用格式如下:
http://api.smsbao.com/sms?u=USERNAME&p=PASSWORD&m=PHONE&c=CONTENT
登录到深信服aTrust的后台管理页面,在短信网关的位置进行新增短信网关的配置。
填写接口名称等基本信息后,主要就是要提交的请求内容和方式,我们采用GET方式提交。
短信的模板如下配置:
#验证码通知
{{user.username}},您好!
您的验证码为:{{env.code}} , {{env.smsEffectiveTime}}分钟内有效 , 请妥善保管!
#上线风险通知
您的账号存在异常登录行为,请关注:
账号:{{user.username}}
时间:{{config.dateTime}}
地点:{{env.city}} {{env.ip}}
详情:{{env.events}}
终端名称:{{env.deviceName}}
终端类型:{{env.deviceOS}}
如果是您本人操作,请忽略此次提醒
如果非本人操作,请尽快修改密码或联系管理员处理
#SPA分发通知
尊敬的{{user.username}}先生/女士:
您的办公接入客户端的安全码为{{env.spaSecret}}
当客户端连接地址{{env.serverAddress}}失败时可通过此安全码进行激活后正常登录。注意安全码有效期截止时间为{{env.spaValidDate}}。
#管理员验证码通知
{{user.username}},您好!
您的验证码为:{{env.code}} , {{env.smsEffectiveTime}}分钟内有效 , 请妥善保管!
至此配置都比较简单,验证内容也可以成功的提交到短信宝的调用接口上,但是返回值的相应处理上遇到了一些问题,直接看响应内容是包含http头等相关的信息,直接将认证条件设置为body等于0,aTrust无法正常处理。
{ "statusCode": 200, "data": { "headers": { "server": "nginx/1.11.2", "date": "Thu, 02 Mar 2023 04:54:53 GMT", "content-type": "text/plain; charset=iso-8859-1", "content-length": "1", "connection": "close" }, "body": "0" } }
因为短信宝发送短信成功只会返回一个数字0,但是aTrust默认只能处理xml或json格式,所以要用到预格式处理来封装我们需要的内容。
/**
* 示例函数:
* @brief 后置响应预处理函数。对http(s)认证服务器返回的数据,预处理成
* 标准的json格式数据。
* 如果启用了此脚本,则会使用result中的数据进行认证成功判断
* @param response{object} http(s)认证服务器返回的结果对象
* @param result{object} 响应预处理后的结果对象(json格式)
*/
function AfterResponse(response, result) {
//TODO: 在此添加nodejs代码
if(response.body.toString().indexOf("0") != -1)
{
result.code = 1;
}
else
{
result.code = -1;
}
}
AfterResponse(response, result);
思路就是把返回来的对象转成字符串,然后找有没有0,有就给result对象的code属性赋值1表示发送成功,没有就赋值-1表示失败。
完成上述配置后,短信接口配置完成。