看代码研究了一下Hacker News Android 客户端如何处理登录验证问题。
登录流程
1. APP先用httpclient请求PC上的登录页面,拿到一堆html代码,然后从中解析中fnid, 应该是csrf token
2. 然后再把fnid, username, password 作为参数去POST PC上的登录form,服务端返回两个东西:
a. cookie: httpclient的cookieStore上会多一个cookie(key=user)
b. http response: 服务端返回一个字符串,称为userToken. 它的值其实就是上面说的cookie的值
3. 最后把userName和userToken存入Settings
登录后使用用户身份
使用用户身份时,会简单地把token当成cookie来用:把userToken从Settings中取出,构建好CookieStore, 然后塞到http client中,最后发出请求
API
Apache HttpClient 及其Cookie API + Android SharedPreference
评价
这个方案实际上是以Cookie作为客户端和服务端交互语义的载体。好处是,服务端基本上只需写一套以cookie为核心的认证代码,就可以同时满足PC和APP的需要。