概述 last.fm android的认证机制与cookie类似,但与cookie无关。 类似于OAUTH,它也有appKey/appSecret体系,以允许第三方开发者开发应用;然而,这个体系跟OAUTH没有任何关系,last.fm android这个APP也跟第三方开发者没有什么关系。 登录、认证流程 1. 用户输入用户名、密码 2. 客户端把用户名、密码经加密处理后传给服务端,服务端认证通过后,返回一段XML;客户端再把这个XML反序列化为一个JAVA对象:fm.last.api.Session. 这个对象包含userName和一个token(代码中称为sessionKey) 3. 客户端会把对象中的 userName和sessionKey存入到settings中 (SharedPreference) 4. 同时还会把这个Session对象作为一个全局变量放在内存中,相当于setting中所存session信息的缓存 5. 后续的访问中,如果客户端需要表明身份,则会传入sessionKey; 服务端会通过sessionKey来判断该请求是否代表合法的用户。 整个过程类似于服务端返回一个cookie, 客户端在后续请求中发出cookie . 如何记住登录 启动后,在LastFMApplication这个activity的onCreate()中会 去settings中取出已登录的userName和sessionKey ,然后封装出Session对象,作为全局变量放到内存里;接下来直接进入LastFm Activity或Profile Activity,整个过程并没有网络交互。 服务端并没有校验,是不是有安全漏洞? 如果我在首次登录后,把用户名换成另一个人的,就不是可以这个人的身份操作本APP? 答案是:你只能成功进入LastFm和Profile,但无法继续以受害者的身份进行操作;因为在后续的业务数据访问请求中,还是要附带上sessionKey,服务端会根据sessionKey找出你的真实身份。 登出时的行为 登出时会把内存中的Session全局变量置为NULL,并去settings中把userName和sessionKey清除。 这就类似于浏览器中的cookie清除 . 具体使用的通信协议 1.走的是http , 直接用HttpURLConnection; API叫 Parser.getItem(url, params, …) 2.用了https,但不校验任何证书(方法名:trustAllHosts()) 附:加密的细节信息 String md5Password = MD5.getInstance().hash(pass); //一次哈希 String authToken = MD5.getInstance().hash(user …
Android开源项目研究: last.fm android的用户认证 Read More »