详解基于Android应用安全登录认证解决方案

  

近几年移动互联网的高速发展,智能手机的使用用户呈现爆炸性增长,手机终端上的应用程序种类繁多,大多数应用都需要与后台系统进行交互,交互的第一步需要进行登录认证,过于简单的认证方式可能被破解从而造成用户信息的泄露甚至威胁着用户的财产安全。为此基于Android系统,对比现有几种常见的应用登录认证方式,并提出一种采用RSA非对称加密和加入牌时效机制的登录认证解决方案。在登录验证阶段采用RSA非对称加密方式,应用端对服务器端返回的令牌信息加上时间戳,将处理后的令牌信息保存到本地,后面的每次请求都携带该令牌从而实现免登录的登录状态的保持。

  

  

<强> 1.1 Web登录认证方式

  

目前常见的Web认证的方式主要有三种:

  

(1) HTTP基本身份验证只这种方式就是每次请求服务器时都携带用户名和密码,优点是使用非常简单,缺点也非常明显,因为每次都需要携带用户名和密码,很有可能造成密码被截获。

  

(2) OAuth。一种开放的授权标准,允许第三方应用访问用户在某一个服务商服务器上存储的私密数据,其处理流程先是第三方应用通过应用关键和应用秘密换取OAuth_Token进行授权(此时颜色有可能需要输入用户名和密码),授权完成后服务商页面会跳转到第三方应用同时返回访问令牌,此后第三方应用就可以通过这个访问令牌去服务商服务器中访问相应数据。

  

(3)饼干Auth.Cookie认证机制就是浏览器在发起一次登录认证请求时,服务端验证通过后将会在产生一段饼干信息并返回给浏览器,浏览器会将其保存到本地,以后的每次请求都会使用该,,饼干信息而不再进行登录验证。

  

<强> 1.2应用登录认证方式

  

由于应用客户端无法处理饼干信息,因此应用登录认证无法使用Web认证方式中的饼干认证方式,为了登录状态的保持,一般会模拟饼干认证方式,即在应用端发起登录认证请求后,得到服务端验证成功的确认之后,应用端一般会保存一些状态信息在本地,后面每次请求都是携带该状态信息,根据状态信息的不同,可以分为如下两种:

  

(1),保存用户信息表中的某个唯一标识.App端发起登录请求,服务器端在验证成功之后一般会将该登录用户的信息返回给客户端,客户端此时可以将用户信息中的某个唯一标识字段给保存下来,如使用SharedPreference进行保存,后面每次发起网络请求时,先判断本地是否存在该字段,如果不存在说明用户没有进行登录认证,跳转到登录页,如果存在,则直接将这个字段携带进请求信息中,从而实现登录保持状态。这种方式优点是比较简单,缺点就是如果保存的字段容易被别人截获,缺乏安全性。

  

,(2)保存牌信息.App中非常常用的一种登录认证方式,他的实现过程,是由应用程序端发起登录请求,服务器端在验证成功后生成一份令牌信息保存到用户表中并设置一定的时效,同时将此令牌返回给应用端,应用端将此令牌保存到本地,以后的每次发起请求都是用该令牌。与前面一种方式相比,避免了用户表中信息的泄露,相对更加安全。其流程图如下:
  

  

,,详解基于Android应用安全登录认证解决方案

  

这种方式相对于第一种来说更加安全,但还是存在着明显的安全漏洞,需要进行优化。本文将以这种方案为基础,提出一种更加安全的基于Android平台的应用登录解决方案。这里我们把现有的这种方案成为令牌认证机制,本文提出的方案成为改进的令牌认证机制。

  

  

上述令牌认证机制也是存在着一些明显的安全漏洞,本文提出的改进的令牌认证机制就是基于对原来令牌认证机制中安全漏洞的优化。对于登录认证机制,我们可以把它分为登录验证,状态保持和登出三个阶段,改进的令牌认证机制主要是在登录验证和状态保持阶段进行优化。

  

2.1登录验证优化

  

登录验证阶段是指应用客户端向服务器端发起登录认证请求,并携带用户名和密码,服务器端收到请求后获取用户名和密码,并向数据库进行查询验证的阶段。由于这一阶段需要密码的传输,很多情况下可能都是明文或者简单的MD5加密后直接传输,一旦被黑客截获可能造成密码的泄露风险。因此这一阶段的优化就是加强密码加密功能,这里我们采用RSA非对称加密方式。

  

RSA是一种非对称加密,它是对称加密的一种加强版,使用对称加密的服务器端和客户端都使用同一种加密规则,因此在服务器端生成加密密钥之后需要传递给客户端,客户端也需要保存这个密钥,而传递密钥的过程和保存密钥在客户端后都有可能发生密钥的截获造成安全漏洞。而非对称加密方式会在服务器端生成两套密钥,生成的公钥是公开的并传给客户端,私钥保存在服务器端,客户端用公钥加密信息后传递到服务器端,服务器端再用私钥进行解密,因此只要私钥不泄露,通信就是安全的。

详解基于Android应用安全登录认证解决方案