手机客户端和服务器通信时如何安全高效的进行身份验证?
对于一个已经登陆的用户来说,服务器如何进行身份识别呢?不考虑存在session或者cookie的情况。如果客户端每次请求都发送用户名密码,可能不太安全,同时服务器也必须每次都对其进行验证。
或者用户登陆后服务器生成一个token发给客户端,客户端每次请求携带用户id和token,服务器检验id和token是否对应从而进行身份认证,但这样似乎又不安全,只要知道id和token后就可以和服务器进行通信了。
还想到一点,仿照oauth原理,在用户注册时生成(user_token, user_secret),用户登陆时生成(user_login_token, user_login_secret),发送请求时携带两个token和用两个secret的签名,服务器验证此签名进行身份验证。因为secret是保存在客户端的,不会在网络传输,要想伪造必须同时拿到两个secret和两个token才行,而且login_token和login_secret有过期限制,一定程度上保证安全性。
简单说下google的验证方式
1.接口分级
不同的接口采用不同级别的安全认证方式,例如访问缩略图,遍历数据,下载普通app,下载付费app,认证逐渐加强,但随时可以对任意接口提高认证强度
2.数据请求类似oauth
通过用户名和密码和其他参数(平台,安全级别)通过login获得token,具体接口在通过token(用在Cookie中),并且对不同接口采用android或者androidsecure请求(http,https)下一步的数据。
3.对交互数据进行encode
gzip,protobuf,Base64-like encoding,等
4.服务端访问控制。
对一个token的访问频率进行验证,实时关闭或者暂停有问题账户。