注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

yu.chen的博客

坚持到底就是胜利

 
 
 

日志

 
 
关于我

喜欢数学, 喜欢编程,喜欢开发系统,喜欢逆向工程,喜欢欣赏开源前辈的代码

网易考拉推荐

rabbitmq的用户认证的代码实现方式  

2012-09-16 09:38:31|  分类: rabbitmq |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
认证相关的源码文件有:
1.  rabbit_reader.erl
2.  rabbit_auth_backend_internal.erl
3.  rabbit_auth_mechanism_plain.erl
4. rabbit_auth_mechanism_amqplain.erl
5. rabbit_auth_mechanism_cr_demo.erl
6. rabbit_auth_backend_spec.erl
7. rabbit_access_control.erl

其中rabbit_reader.erl负责外部客户端连接的管理,在代码的第9页有一个函数 handle_method0(#connection.start_ok'{},State0)。这个函数是在客户端连接的版本确认后被调用的,开始处 理客户端认证相关的内容。
在page 11中,函数auth_phase/3是封装该模块的用户认证相关的内容。这个函数中,调用了认证模块的handle_response/2函数。

handle_response函数,在rabbit_auth_mechanism_plain.erl, rabbit_auth_mechanism_amqplain.erl rabbit_auth_mechanism_cr_demo.erl中均有不同的实现方式。前两种模式是用户名与密码进行明文传输的,最后一种是 rabbitmq的示范代码,可以在里面添加challenge,reponse,由于该文件名是demo,所以这里用最简单的方式实现了 challenge与response,就是明文传输密码。
rabbitmq兼容了两种基本的认证方式,一种是没有challenge,一种是包含一次的challenge。如果需要更复杂的,rabbitmq就无法做到了。

上述的三个模块只负责认证的通讯过程,但是对于密码与用户名的认证是在rabbit_access_control.erl中完成的。

rabbit_access_control.erl模块本身也是一个接口模块,功能是提取环境变量,获得后台认证的模块,通过这个模块进行认证。
rabbitmq系统自带的认证模块是rabbit_auth_backend_internal.erl

总结一下:
1. rabbit_reader.erl是认证的入口,认证相关的各个模块的最基本的分工合作的实现就是在这个模块中实现的。没有它解决相关消息的提取,消息的发送,其他模块就无法轻松的完成各自的任务。
看完这些代码,很佩服rabbitmq系统相关的设计与开发人员,提供了这么好的源码供学习。
  评论这张
 
阅读(409)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017