GB28181计算注册登陆时的鉴权信息

来源:互联网 发布:linux查看mysql实例名 编辑:程序博客网 时间:2024/05/16 09:41


GB28181中,下级需要向上级进行登录注册,才能开启上下级之间的连接。注册的流程,详见GB28181文档的9.1小节。

在注册过程中,上级有可能(为什么是“有可能”,后面会说)需要对下级进行鉴权校验。鉴权使用的是HTTP的数字摘要鉴权方法。


它的流程是这样的:

(1)首先上下级之间需要协商好下级所使用的国标id号,以及注册鉴权的密码。

id号和密码,一般是由上级填写,并告知给下级。

(2)接下来就是鉴权计算了。所使用的公式是这样的:

HA1=md5(username:realm:password)

HA2=md5(Method:Uri)

RESPONSE=md5(HA1:nonce:HA2)

(3)计算出RESPONSE后,由下级在第二次REGISTER中携带,并由上级依据同样的步骤和方法独立计算得到RESPONSE2。比较RESPONSE和RESPONSE2,两者相等则鉴权成功,否则失败。


其中会涉及到如下几个关键词:

username:即国标id号

realm:通常是id的前10位(参考文档6.1小节)。由上级的401消息携带告知下级。

password:提前配置商定。

Method:REGISTER

Uri:由下级在第二次REGISTER中携带。

nonce:由上级的401消息携带告知下级。


举个例子说明一下:

HA1=md5(username:realm:password)
HA1=md5(11000000003000000001:1100000000:123456)
       =81f021fe3f4876df315d89c82a24cdff    用小写的
        81F021FE3F4876DF315D89C82A24CDFF

HA2=md5(Method:Uri)
HA2=md5(REGISTER:sip:11000000002000000001@192.168.0.112:5060;transport=UDP)
       =160aad37c1bf7fe16ae9cb656ebbf4e4    用小写的
        160AAD37C1BF7FE16AE9CB656EBBF4E4

nonce=13150012922:c44236aa4b0085fd6c5161d73c8e29b3
RESPONSE=md5(HA1:nonce:HA2)
RESPONSE=md5(81f021fe3f4876df315d89c82a24cdff:13150012922:c44236aa4b0085fd6c5161d73c8e29b3:160aad37c1bf7fe16ae9cb656ebbf4e4)
                    =97d60ab7abb7c59d288223600b9eddfd


前面提到,上级有可能需要对下级进行鉴权校验。之所以是有可能,是因为也可以不必对下级进行鉴权校验。无鉴权的注册流程,有两种实现方法。

(方法一)相比于GB28181文档的9.1小节的带鉴权的注册流程,少了步骤2和步骤3。即:下级发送REGISTER方法给上级,上级直接返回200 OK。

(方法二)相比于GB28181文档的9.1小节的带鉴权的注册流程,步骤没有改变,只是在步骤3,不论下级发送上来的RESPONSE消息是什么,上级都会返回200 OK。

原创粉丝点击