讨论主叫号码和鉴权用户不一致方面的问题

79 篇文章 8 订阅
41 篇文章 6 订阅

先贴一段 osipsconfig(OpenSIIPS3.4) 产生的路由脚本:

if ( !(is_method("REGISTER")  ) ) {
		if (is_myself("$fd")) {
				# authenticate if from local subscriber
				# authenticate all initial non-REGISTER request that pretend to be
				# generated by local subscriber (domain from FROM URI is local)
				if (!proxy_authorize("", "subscriber")) {
						proxy_challenge("", "auth");
						exit;
				}
				if ($au!=$fU) {
						send_reply(403,"Forbidden auth ID");
						exit;
				}

				consume_credentials();
				# caller authenticated
				
		} else {
				# if caller is not local, then called number must be local
				
				if (!is_myself("$rd")) {
						send_reply(403,"Relay Forbidden");
						exit;
				}
		}
}

第一个 if 检查是否 REGISTER 方法。

第二个 if 检查 From 域是不是自己。

但这些不是我们关注的重点。

我们要留意中间的这几句:

            if ($au!=$fU) {
                        send_reply(403,"Forbidden auth ID");
                        exit;
                }

下面是 $au 的英文解释:

$au - Auth username user, user part of username from Authorization or Proxy-Authorization header

简单准确,熟悉 SIP 协议的秒懂,应该不需再翻译成中文。

$fU 就更简单了,就是From URI username。

我们知道很多模拟网关会把整个网关注册到 OpenSIPS,

fxo-to-ip 路由时,INVITE包里面的$fU就是线路主叫号码,跟鉴权用户不一致(鉴权用户只有一个),那么这种情况下就不要再检查 $au 是否等于 $fU 了。

OpenSIPS 就介绍到这里。

Kamailio 也可以做上面的检查,但 Kamailio 有自己独特的方式,

看下面这段路由代码:

# authenticate requests
if (!auth_check("$fd", "subscriber", "1")) {
	auth_challenge("$fd", "0");
	exit;
}

留意 auth_check 的第三个参数,如果为 1,那么 $au 必须等于 $fU,否则就失败;如果为 0,那么不再检查 $au 是否等于 $fU。

Kamailio 就介绍到这里。

至于 FreeSWITCH,我不清楚是否有类似的检查(估计没有)。如果您更清楚细节,烦请留言给我,先致谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值