应用授权的请求地址格式,使用Fiddler2捕捉一次完整的授权操作就可以大致了解腾讯微博的登陆原理(重点在h_login_11.js)
对于https的请求服务器证书回调验证我们都返回true
1、获取临时验证码
请求链接格式如下:
uid:用户账号
r:0~1之间的随机数(允许忽略)
第二个参数就是验证码,第三个参数是用户账号调用$str.uin2hex(h_login_11.js)的结果,它会被用来后续参与用户密码的加密参数。
2、用户密码加密
查看h_login_11.js源代码,用户密码会被$.Encryption.getEncryption函数加密
三个参数分别是用户密码、加密账号、验证码,加密算法步骤如下:
1)md5([用户密码])
2)hexchar2bin([上一步返回字符串])
3)md5([上一步返回字符串] + [加密账号])
4)md5([上一步返回字符串] + [验证码大写])
之前考虑到该算法的复杂程度,使用.NET javascript 引擎Jint执行$.Encryption.getEncryption,但返回的结果始终不对。在仔细阅读了$.Encryption内部源代码后参考编写了一个C#.NET版本(需要注意字符编码为ISO-8859-1)。
调用示例:
3、HTTP GET完成登陆
腾讯并没有像新浪、网易使用HTTP POST的方式,而是HTTP GET。请求登陆链接格式:
u:用户名
p:用户密码(需要使用固定加密算法)
verifyCode:验证码(第一步请求获取)
u1:应用授权链接
4、获取AuthorizationCode
再次请求授权链接会发现响应还是返回登陆内容,其实我们已经完成了登陆,只需要将返回内容中隐藏域u1的值获取并再次请求就可以获得授权代码。其中最重要的一个查询参数就是sessionKey。
5、获取access_token
请求地址格式: