App登陆保存数据流程

App因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂。 

App登陆要实现的功能: 

  • 密码不会明文存储,并且不能反编绎解密; 
  • 在服务器端可以控制App端的登陆有效性,防止攻击者拿到数据之后,可以长久地登陆; 
  • 用户如果密码没有泄露,不用修改密码就可以保证安全性; 
  • 可以区分不同类型的客户端安全性;比如Android用户受到攻击,只会让Android用户的登陆失效,IOS用户不受影响。 

 

App第一次登陆流程:

 

 

  • 用户输入密码,App把这些信息用RSA公钥加密:(用户名,密码,时间,mac,随机数),并发送到服务器。 
  • 服务器用RSA私钥解密,判断时间(可以动态调整1天到7天),如果不在时间范围之内,则登陆失败。如果在时间范围之内,再调用coreservice判断用户名和密码。 

 

这里判断时间,主要是防止攻击者截取到加密串后,可以长久地利用这个加密串来登陆。 

  • 如果服务器判断用户成功登陆,则用AES加密:(随机salt,用户名,客户端类型,时间),以(用户名+Android/IOS/WP)为key,存到缓存里。再把加密结果返回给客户端。 
  • 客户端保存服务器返回的加密串 

 

App自动登陆的流程:

 

  • App发送保存的加密串到服务器,(加密串,用户名,mac,随机数)==>RSA公钥加密 
  • 服务器用RSA私钥解密,再用AES解密加密串,判断用户名是否一致。如果一致,再以(用户名+Android/IOS/WP)为key到缓存里查询。如果判断缓存中的salt值和客户端发送过来的一致,则用户登陆成功。否则登陆失败。 

不用AES加密,用RSA公钥加密也是可以的。AES速度比RSA要快,RSA只能存储有限的数据。

 

 

 

更多相关文章

  1. 花椒Android客户端多变体构建实践
  2. 微信ANDROID客户端-会话速度提升70%的背后
  3. Android拷贝工程不覆盖原工程的配置方法
  4. 博客园app for xamarin android一款简洁阅读的博客园android客户
  5. Android(安卓)开发艺术探索(终篇)
  6. 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通
  7. Android面经:二流Android攻城狮用一个月面试+复习+总结,收获Offer
  8. Android静默安装和静默卸载
  9. (4) Android中Binder调用流程 --- bindService的Binder流程介绍

随机推荐

  1. android之高德地图学习
  2. react-navigation使用及dva初探二
  3. Android 自定义控件
  4. Android:Gradle 解析
  5. Android -- Android Init进程的处理流程
  6. android process and thread
  7. Blog-07-《一周快速上手Kotlin For Andro
  8. QCom Camera Development
  9. 一个很棒的 Android(安卓)APP框架
  10. android:gravity和android:layout_gravit