控件開發基礎

博客园 首页 新随笔 联系 订阅 管理

Asterisk的type类型和身份认证  

转载:http://zeevli.blog.163.com/blog/static/119591610201111745012380/

在Asterisk中对某个peer的类型分为3种:peer, user和friend

简单的说,在这篇文档里, type=peer定义对方是一个服务提供者, 它允许你的Asterisk通过这里定义的服务商打电话; 而user则定义对方是你的一个客户端, 允许对方通过你的Asterisk打电话. friend就是两者兼有.

其实type的真正意义在于Asterisk怎么去处理发往外部和来自外部的请求.

type=peer
如果type是peer,有两层含义.
1. 可以将对方作为一个SIP Service Provider, 允许你的Asterisk通过对方进行呼出.
2. 如果对方在逻辑上是一个客户端, asterisk将根据传入的Invite请求来对对方进行身份验证, 但需要注意的是这里的验证不是通过username和secret, 而是通过对方的address和port进行验证. 这里分两种情况:

 >>对方的address和port没有匹配到你在sip.conf中对任何一个peer的设置, 如果你的Asterisk允许匿名呼入(allowguest=yes), 那么, 该呼入将被传到在s的general配置中的context上. 如果不允许匿名呼入, 直接拒绝该呼入.
>>对方的address和port匹配到了任何一个sip.conf种的peer设置, 那么改呼入将被传到该peer指定的context上.

Asterisk还提供了一个insecure参数来配置对peer呼入的身份验证方式.
insecure=port|invite
    port: Asterisk忽略对方的port, 只根据对方的address来验证某个peer, Asterisk收到对方的Invite后, 会发送SIP/2.0 401 Unauthorized到对方, 要求对方发送认证信息, 但事实上对方返回回来的认证信息不会被真正使用.
    invite: Asterisk对初始Invite不进行验证. 这意味着Asterisk直接使用客户端传入的Invite包中的信息尝试进行验证而不会发送SIP/2.0 401 Unauthorized包到对方

type=user
根据来源Invite包中的用户和密码信息来认证,所以对方不能也不需要Register到你的Asterisk服务器上.

需要额外说明一点的是Register, 如果某个peer的host设置为dynamic, 那么Asterisk允许客户端通过Register的方式来告诉Asterisk对方的地址和端口.
posted on 2014-08-12 05:40  ada  阅读(1418)  评论(0编辑  收藏  举报