飞信的整个登录过程包括取系统配置、验证身分、取联系人、取离线消息等等一堆过程,这里就不细述了,下面主要说明到是一些朋友比较关心的身份验证是怎么做的。
飞信有两处验证身份,第一次是通过SSL向SSIPortal登录时,第二次是用SIP协议向Proxy Server注册时。
一、向SSIPortal登录
SSI是啥,我一直没弄明白,是Single Sign-In? 习惯上不是SSO(Single Sign-On)吗?反正飞信一开始,必须向nav.fetion.com.cn登录,这是飞信的Portal。登录过程其实很简单,就是通过SSL做一个的GET,请求是:
https://nav.fetion.com.cn/ssiportal/SSIAppSignIn.aspx?mobileno=13XXXXXXXXX&pwd=XXXX
pwd就是这个用户的密码。服务器验证通过后,就会返回200 OK,Cookie中就有关键的SSIC了。SSIC应该是服务器给客户端的Credential,以后再跟服务器以Http的方式打交道,就必须带上这个Credential了,如下一步的可选操作Geturi:
POST /hds/geturi.aspx HTTP/1.1
User-Agent: IIC2.0/PC 2.1.0.0
Host: 221.130.45.205
Cookie: ssic=xxxxxxxxxxxxxxxx
Content-Length: 0
Connection: Keep-Alive
如果采用http方式而非tcp直连方式(连proxy server的8080端口),那么与服务器间的sip协议是用http承载的,每次都必须带上这个ssic。
这次登录除获得Credential外,还一个重要的作用就是获得用户的URI,即"sip:123456789@fetion.com.cn;p=xxxx".
二、向Proxy Server注册
完成上一步,就开始SIPC的交互过程了,首先用Register方法向Proxy Server注册,Proxy Server的地址(221.130.45.203)从哪来的,以前文章专门说过。
注册的过程是:
-----------------------------------------------------
xxx.xxx.xxx.xxx:xxx >>>>>>>> 221.130.45.203:8080
R fetion.com.cn SIP-C/2.0
F: 123456789
I: 1
Q: 1 R
L: 249
<args>.......</args>
-----------------------------------------------------
xxx.xxx.xxx.xxx:xxxx <<<<<<<< 221.130.45.203:8080
SIP-C/2.0 401 Unauthorized
I: 1
Q: 1 R
W: Digest algorithm="MD5-sess",nonce="xxxxxxxxxxxxxxxx"
-----------------------------------------------------
xxx.xxx.xxx.xxx:xxxx >>>>>>>> 221.130.45.203:8080
R fetion.com.cn SIP-C/2.0
F: 123456789
I: 1
Q: 2 R
A: Digest response="xxxxxxxxxxxxxxx",cnonce="xxxxxxxxxxxxxxxx"
L: 249
<args>......</args>
-----------------------------------------------------
xxx.xxx.xxx.xxx:xxxx <<<<<<<< 221.130.45.203:8080
SIP-C/2.0 200 OK
I: 1
Q: 2 R
X: 600
L: 877
<results>.....</results>
这是个标准的Digest Authentication验证过程,具体去看SIP或HTTP的文档好了:) 我们来关心"W"即WWWAuthenticate这个SIP Header Field,nonce是服务器给出的,那response和cnonce是怎么计算出来的呢?
计算response和cnonce需要用到sid(飞信号)、password、domain(fetion.com.cn或vodafone等用户所属域)、nonce。飞信计算cnonce是用了4个随机数组成一个16进制的字符串然后求这个字符串的MD5,responce的计算方法是:
1.求"sid:domain:passwd"这个utf8字符串的MD5值,得出key
2.求"key:nonce:cnonce"这个utf8字符串的MD5字符串,得出H1
3.求“REGISTER:sid"这个utf8字符串的MD5字符串,得出H2
4.求"H1:nonce:H2"这个utf8字符串的MD5字符串,即为response.
以上就是飞信的身分验证过程,我还没来得及写代码测试,应该就是这样子。另外,如果知道用户的URI,是否可以不用注册到SSIPortal?这个需要测试才知道,我看飞信中好象还对注册到SSIPortal的Session做了Keep Logon。
好啦,分析到现在我们可以做一个飞信的客户端了,哈,谁有兴趣? ;)
分享到:
相关推荐
手机飞信登陆信令流程 手机飞信登陆 手机飞信登陆
飞信飞信飞信飞信飞信飞信飞信飞信源码飞信源码飞信源码飞信源码飞信源码飞信源码飞信源码飞信源码飞信源码飞信源码
飞信.ppt飞信.ppt飞信.ppt飞信.ppt
很好用的飞信很好用的飞信很好用的飞信很好用的飞信很好用的飞信很好用的飞信很好用的飞信很好用的飞信
n5230飞信 nokia 5230版 飞信 下载 5230 专用 版飞信 n5230 官方版 飞信 非通用版 诺基亚 5230 专用版 飞信n5230飞信 nokia 5230版 飞信 下载 5230 专用 版飞信 n5230 官方版 飞信 非通用版 诺基亚 5230 专用版 飞信
C#飞信SDK2C#飞信SDK2C#飞信SDK2C#飞信SDK2C#飞信SDK2C#飞信SDK2C#飞信SDK2
Wap飞信源码,在线飞信源码,PHP网页飞信源码
Linux飞信,Linux服务器实现飞信功能Linux飞信,Linux服务器实现飞信功能Linux飞信,Linux服务器实现飞信功能Linux飞信,Linux服务器实现飞信功能Linux飞信,Linux服务器实现飞信功能 Linux飞信包下载
迷你飞信 实现基本的收发短信和加好友功能 源码http://download.csdn.net/source/2609976
飞信php网络版;飞信php网页版;这要要飞信就可以免费发短信,这里是php网页飞信源码,欢迎下载学习
飞信2008!·飞信2008!·飞信2008!·飞信2008!·飞信2008!·
飞信接口 飞信源代码 飞信源代码 飞信源代码
一)使用说明 ...1. 利用socket模拟登录wap版飞信,并模拟发送飞信,好处是不会有验证码,也比较稳定。 (三)其他 1. wap飞信登录地址:http://f.10086.cn 2. 作者博客:http://blog.quanhz.com
手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信手机飞信
用C++实现的飞信的登录,发送给好友,发送给没 有开通飞信的陌生人(群发陌生人)。
只实现了登陆验证、发短信的过程 是个学习的好材料,也可以加进自己程序里,让自己的程序具有发短信功能。 VC6作为开发环境 麻烦大家测试时把手机号和密码修改为自己的手机号和飞信密码,谢谢。
参考Php版飞信(http://sourceforge.net/projects/openfetion/)用Delphi实现了中国移动飞信2008协议的登录和发短信部分。其它功能并没有实现,不过在此基础上实现起来应该没有难度。 该程序为纯绿色软件,不写...
飞信php 飞信php 飞信php 飞信php 飞信php 飞信php 飞信php
飞信2008免安装版本飞信2008免安装版本飞信2008免安装版本飞信2008免安装版本飞信2008免安装版本飞信2008免安装版本
黑莓绝对好用的飞信黑莓绝对好用的飞信黑莓绝对好用的飞信黑莓绝对好用的飞信黑莓绝对好用的飞信黑莓绝对好用的飞信黑莓绝对好用的飞信