转载自:
http://hi.baidu.com/nathan2007/blog/item/10645631faa0951aeac4afc5.html
作者:nathan
好久没搞这个了,现在根据一些朋友提出的问题继续分析好了。:)
飞信的整个登录过程包括取系统配置、验证身分、取联系人、取离线消息等等一堆过程,这里就不细述了,下面主要说明到是一些朋友比较关心的身份验证是怎么做的。
飞信有两处验证身份,第一次是通过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。
好啦,分析到现在我们可以做一个飞信的客户端了,哈,谁有兴趣? ;)
分享到:
相关推荐
3. **源码分析**:源码中可能包含了飞信服务的客户端实现,包括初始化连接、身份验证、调用接口的方法等。通过对源码的学习,我们可以了解如何构造请求、解析响应,以及处理可能出现的错误。 4. **身份验证**:飞信...
这个密钥用于验证每次API请求的身份,确保只有授权的应用才能使用飞信服务。 4. **消息管理** - **好友管理**: 开发者可以通过API接口进行好友添加、删除、查询等操作,创建一个社交网络。 - **群组管理**: API还...
2. **身份验证**:为了连接飞信服务器,开发者需要实现登录功能,通常涉及OAuth认证过程。这要求对OAuth协议有一定了解,包括获取授权码、访问令牌和刷新令牌等步骤。 3. **消息发送与接收**:接口提供了发送和接收...
4. **身份验证**:为了确保安全性,飞信接口可能会有身份验证机制,如OAuth或者基于会话的验证。开发者需要实现相应的认证逻辑,确保接口调用的合法性。 5. **错误处理**:在接口调用过程中,可能会遇到各种错误,...
2. **认证机制**:飞信API可能需要开发者提供手机号码和密码进行身份验证。这通常涉及到OAuth2.0等安全协议,确保只有授权的应用才能访问用户数据。 3. **发送飞信**:核心功能是发送飞信到指定的手机号码。接口...
6. 登录与身份验证:飞信客户端需要能够进行用户登录和身份验证。这涉及到加密算法(如MD5或SHA)、会话管理(Session)和令牌验证等安全机制。 7. 消息发送与接收:飞信客户端需要实现实时的消息发送和接收功能。...
4. **安全机制**:为了确保通信的安全,飞信可能采用SSL/TLS加密、身份验证机制等,防止数据被窃取或篡改。 二、飞信2008源码分析 源码分析是理解软件内部工作原理的重要途径。飞信2008的源码揭示了其客户端的设计...
为了确保安全性,可能需要设置API密钥或证书来验证发送者身份。 在部署飞信机器人时,用户可能需要配置以下几个方面: 1. **飞信账号配置**:设置用于发送短信的飞信账号,包括用户名和密码,可能还需要验证手机号...
飞信,作为中国移动推出的一款即时通讯软件,曾经在2000年代中期风靡一时,它允许用户通过手机和互联网进行免费短信收发、语音聊天等服务。此资源是飞信的源代码,对于想要深入理解即时通讯软件开发或者对C#编程语言...
1. **注册飞信开发者账号**:首先,你需要在飞信开放平台注册成为开发者,获取API密钥和应用ID,这些是后续调用API时的身份验证凭据。 2. **分析API文档**:查阅飞信的官方API文档,了解发送短信的具体接口、请求...
- 应用申请:开发者需在飞信开放平台注册并提交应用信息,经过审核后,会得到一个唯一的App Key和App Secret,用于后续的身份验证。 - OAuth2认证技术规范:用户授权应用时,应用会引导用户跳转到飞信的授权页面,...
3. **飞信协议解析**:飞信有自己的通信协议,开发者需要了解其消息格式、命令结构以及如何进行身份验证。 4. **UI设计**:如果源码包含Windows Forms或WPF界面,那么开发者需要掌握这些UI框架的控件使用和事件处理...
6. **身份验证和安全**:飞信登录和通信可能涉及身份验证机制,如OAuth或者自定义的加密算法。源码会展示如何处理这些安全问题。 7. **UI设计**:源码中的Windows Forms或WPF界面设计可以学习到如何创建用户友好的...
在命令行中发送消息可能涉及到的参数包括目标手机号码、短信内容、发送者身份验证信息等。例如,一个基本的命令可能看起来像这样:`./飞信发送消息程序 --number 13800138000 --message "测试短信" --username your_...
在代码示例中,`session`变量存储了从服务器获取的会话标识,该标识在后续的请求中会被携带,以验证客户端身份。 2. **Token(t参数)**:在飞信接口中,`t`参数用于防止跨站请求伪造(CSRF),确保每次请求的唯一...
开发者需要先注册成为飞信开发者,获取API密钥和应用ID,以便在请求中进行身份验证。这些接口通常以HTTP或HTTPS形式提供,使用POST请求携带必要的参数。 2. **PHP基础准备**: 在PHP中,我们可以使用cURL库或者...
- **身份验证**:使用飞信接口前,通常需要进行用户身份验证,这通常涉及到用户名、密码以及可能的验证码。在Java代码中,这会表现为调用特定的登录接口,并处理登录响应。 - **消息发送与接收**:飞信接口提供发送...
飞信(Fetion)短信发送接口API是一个用于在无需打开飞信客户端的情况下,通过编程方式向飞信联系人发送短信的技术。FetionLite是一个轻量级的飞信客户端软件,它的主要功能就是实现这一服务,使得开发者可以通过...