Android-手机客户端和服务器通信时如何安全高效的进行身份验证?

Android-手机客户端和服务器通信时如何安全高效的进行身份验证?

夜无邪 发布于 2017-10-14 字数 730 浏览 1194 回复 7

对于一个已经登陆的用户来说,服务器如何进行身份识别呢?不考虑存在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和secret有过期限制,一定程度上保证安全性。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

晚风撩人 2017-11-10 7 楼

简单说下google的验证方式

1.接口分级
不同的接口采用不同级别的安全认证方式,例如访问缩略图,遍历数据,下载普通app,下载付费app,认证逐渐加强,但随时可以对任意接口提高认证强度

2.数据请求类似oauth
通过用户名和密码和其他参数(平台,安全级别)通过login获得token,具体接口在通过token(用在Cookie中),并且对不同接口采用android或者androidsecure请求(http,https)下一步的数据。

3.对交互数据进行encode
gzip,protobuf,Base64-like encoding,等

4.服务端访问控制。
对一个token的访问频率进行验证,实时关闭或者暂停有问题账户。

清晨说ぺ晚安 2017-10-30 6 楼

将你的tocken和手机的imie号或者mac号进行绑定。

浮生未歇 2017-10-27 5 楼

要安全性的话最可靠的就是使用HTTPS。OAuth2.0之类的协议,现在也是依靠HTTPS来维持通信保密性。通过HTTPS发送的数据包理论上不存在中途被截获、破解的可能性。
所以只要使用Token,再加上HTTPS就行了。

使用HTTPS的时候,最好验证对方服务器的证书的确是自己的服务器的证书,防止DNS劫持之类的攻击手段。

虐人心 2017-10-24 4 楼

在Web/HTTP领域,Session/Cookie就是最常用的身份管理手段,其次是 HTTP Auth,再其次是有用户证书的HTTPS。

归属感 2017-10-20 3 楼

安卓session,是可以用的,session是保存在服务端的,客户端只要知道phpsessionid就行了,将知道的sessionid通过header()进行很传输到浏览器,php就会想正常那样就会去接收使用这个sessionid相对应保存的配置信息

想挽留 2017-10-17 2 楼

如果如崔苔吾所说的情况,因为是手机端才不考虑session,那就是误区了。不管是android还是iphone,都可以实现session,只需要利用apache的开源项目,Apache HttpClient,客户端就会自动维护与服务器之间的登陆状态,所以,比如你用的J2ee,加个filter就可以判断用户登陆状态了。

灵芸 2017-10-14 1 楼

我估计你这个机制就是android客户端基于LAMP或者LNMP机制实现用户登录系统的
因为没有浏览器就不可能依赖cookie来保存sessionid

以前是通过发送一个随机的sessionid去给客户端,
现在你可以模仿这个过程生成一个自己设定的sessionid给客户端(当然你需要搞一个自己生成sessionid的方法)

然后发送给客户端保存并请求时携带,
服务端利用MC或者Redis来保存sessionid(可以以这个为键存储UID)
这样客户端访问时带上模拟的seesionid请求,
服务端通过读取缓存信息来判断用户是否登录,
这样基本上就可以模拟基于浏览器的登录注册过程了