4.3 正向认证

正向认证,即OM对应用服务器的认证,包括IP认证数字签名认证两种方式,您可以根据自己的实际场景选择一种来完成认证。

一、IP认证

IP认证,只允许某一固定IP地址向OM发送API请求,其他地址统统认为没有权限。

适用的应用场景:

  1. 应用服务器的IP地址/域名固定;
  2. 一个应用服务器对接一台OM;
  3. 应用服务器和OM之间网络互通。

配置

配置方法,如下图所示:

参数说明:

  • 服务器地址: 应用服务器的IP地址/域名和监听端口,如:192.168.130.27:8989。如果用户未指定端口时默认为80端口。
  • URL: 接收API报告的相对路径(也可不填写)。格式为:{part1}/{part2}/{part3}/{……},如:omapi/report。

服务器地址和URL组合起来即为应用服务器接收API报告的全路径,如:192.168.130.27:8989/omapi/report。

应用服务器地址有两个作用:

  1. 接收API报告:OM会将API消息推送给这个地址;

  2. 访问权限控制: OM只受理从该服务器的IP地址(端口不影响)发送的API请求;拒绝受理从其它地址发送的API请求,并对该请求响应Unauthorized。

二、数字签名认证

数字签名认证本质上是通过验证OM和应用服务器双方持有的秘钥来完成认证。

说明:设备接收消息时,优先走IP认证,若IP认证不通过,再进行数字认证。

点击这里下载开源代码。

版本要求

OM软件版本:Rev 2.1.5.99及其以上。

适用的应用场景:

  1. 应用服务器采用动态域名,IP地址不固定;
  2. 一个OM要对接多个API应用服务器;
  3. API应用客户端要直接访问OM
  4. API消息的源地址发生变化;
  5. 应用服务器通过迅时云平台转发消息给OM。

配置

配置参数:数字签名认证密码(接收)和数字签名有效期。

  • 这两个参数可在OM的Web页面上进行配置(web版本须在1.0.91_p1及以上,web版本查看方法:在地址栏ip地址后面输入version,回车,如http://192.168.130.186/version。

  • 若web版本较低,可通过在浏览器地址栏输入对应的URL接口进行参数查询和配置

配置界面,如下图所示:

参数说明:

  • API数字认证密码(接收):OM对应用服务器认证的秘钥,可自定义,需和应用服务器发送请求时携带的秘钥保持一致。
  • API数字认证有效期:可自定义,范围:0~86400,单位:秒,只有在该有效期内认证参数才有效,0表示永久有效。

认证原理

  • 首先,应用服务器和OM双方需要配置相同的API密码(API_Pasword)。

  • API_Password是认证的根本依据。每当OM收到一个API请求时,都带上一段由API_Password生成的认证信息,OM通过判断请求方的API_Pasword和自己的是否相等,从而判断请求方是否有执行权限。

  • 为了保证API_Password的网络传输安全,不被黑客通过网络抓包所窃取。所以,我们并不直接在网络上传输API_Password,而是传输其数字签名。

交互流程

1. 当应用服务器向OM发送API请求消息,需要携带上由API Password经过数字签名生成的认证信息(Auth),

Auth由三部分组成:

  • nonce——由应用服务器生成的随机数;
  • timestamp——由应用服务器生成的时间戳;
  • signature——数字签名,先将API Password、nonce、timestamp三个参数值拼接起来,然后对其进行md5运算得到的32位小写字符串。即,signature=md5(API Password+nonce+timestamp)。

2. 当OM收到API请求消息后,用自己的API_Pasword(此处用API_Password"表示)加上【API请求消息中的nonce和timestamp】进行md5运算,即signature"=md5(API_Password"+nonce+timestamp),OM对比signature"和signature是否相等,从而推出API_Password"和API_Password是否相等。如果相等,则说明请求方有执行权限,否则没有。

3. 之后,为了保证效率,OM并不要求每次API请求都要更新Auth,而是会保证在一段有效期(API_TIMEOUT)内该Auth可以重复使用。(API_TIMEOUT的配置方法见本文最后一部分)

4. 如果有效期过期或认证信息错误,OM会给请求方响应unauthorized及其错误码。

接口说明

1. 带认证消息的请求消息示例

<?xml version="1.0" encoding="utf-8" ?>
<Auth>
    <Timestamp>1455433892</Timestamp>
    <nonce>14314</nonce>
    <Signature>890b422b75c1c5cb706e4f7921df1d94e69c17f4</Signature>
</Auth>
<Control attribute="Query">
    <DeviceInfo/>
</Control>

其中,Auth结点为认证信息,Control结点为实际要执行的内容,可根据实际情况更换。

参数说明

参数名称 类型 参数说明
nonce string 由应用服务器生成的随机数,最大长度32位。
timestamp string 应用服务器生成该随机数时的时间戳,从1970年1月1日0点0分0秒开始到现在的秒数。
signature string 数字签名,32位小写。计算方法为:将API Password、nonce、timestamp三个参数的值按先后顺序拼接成一个字符串并对其进行md5运算。其中API Password是应用服务器和OM双方持有的相同密码。

2. 认证失败的响应消息格式

<?xml version="1.0" encoding="utf-8" ?>
<unauthorized/>
<err code=”XXX” reason=”XXX”/>

参数说明:

Code Reason 描述说明
100 authentication failed 认证失败。可能原因:API请求消息中没有携带认证信息。
101 mandatory parameter missing 参数不完整。认证信息必须同时包含nonce、timestamp、signature三个参数
102 password validation failure 密码鉴权失败
103 nonce timeout nonce 过期, nonce的最大有效期由配置参数API_TIMEOUT 决定
104 unspecified 其它

results matching ""

    No results matching ""