APP登录方案设计

28 篇文章 1 订阅

生成token

  1. 每次用户在注册或者登录时,验证密码通过以后,返回给用户一个token,APP缓存此token;
  2. 以后客户端每次发送请求的时候,都不用再带上密码了,直接带回token信息即可验证身份。
  3. 一般来说,token的生成一定要保持唯一,不然无法标明用户的唯一身份;
  4. token的生成策略,建议可以依赖自己的策略反解出userId,因为token一般是存储在缓存中的,当缓存挂掉以后,可以依赖于反解出的userId,使得服务暂时不至于不可用。常用的方法自然还是加盐和AES加密,而且这里的盐也不需要保存。

token安全性

  1. 每次请求都发送token,很明显的弊端是token容易被拦截,一旦token被拦截,用户的身份安全就会丧失;
  2. 有方法使token只传输一次的:只有用户第一次登陆的时候,下发一个token给客户端,以后每次请求都不再发送token,而使用加密算法来验证身份。
  3. 加密算法一般思路是:每次url请求的时候都带上用户自己的userId,同时对所有的key value参数,根据key的字母序排序组合成key1=value1&key2=value2的串,再把url请求的路径(类似/feed/1/comment)并入串中,最后再把token并入串中,然后求整个串的md5。请求的时候,添加一个参数 sign=md5签名结果。
  4. server收到请求之后,先用userId去找到此user的token,然后再使用此token做一遍与上面相同的加密,如果加密结果相同,则验证通过。如果缓存挂掉,则暂时不验证token和签名,保证服务暂时可用,然后尽快抢修缓存。
  5. 上述过程还有一个问题,如果一个串被别人拦截以后,可能会被多次用这个url访问,被重放攻击。为了防止重放攻击,所有的请求url中,都需要有一个参数 timestamp,标识此次请求产生的时间。服务端在收到请求以后,先判断timestamp是否在允许范围内,比如5min之内,如果不再则直接拒绝。
  6. 其实。。。。还有一个问题,APP在获取timestamp的时候,是依赖于手机时间的,如果用户调整了手机时间,或者手机时间不正确,那就可能发送过来的timestamp一直通不过server的验证。所以,timestamp方案,一般需要APP启动时候向服务器请求一个时间戳,然后在APP内部维护一个时钟,根据自己的时钟和获取到的时间戳来定义每次请求的timestamp。当然,timestamp方案也要求各个服务器的时钟要尽量同步。

token的进一步安全

  1. 到这里,身份验证是不是就绝对安全了呢? no。。。因为当用户在第一次登陆的时候,token回传的还是明文,这就是不安全的地方。那如果在这里保证token不明文呢?
  2. 【阅读原文】提供了一中方案,APP在登陆的时候,带过来自己随机生成的16位随机串,服务器在生成token以后,用这16位随机串加密token,然后再回传。APP在收到加密后的token以后,再使用相同的随机串解密,即可获得token;
  3. 聪明如你,肯定会想到,16位随机串如何保证安全传输?如果别人知道了你的算法,又嗅探到你的随机串,那你token同样是不安全啊?。。。
  4. 那该如何解决呢? 这个就是秘密了。

基本原则

  1. https。APP和server之间的连接,一定要使用https。
  2. 能不用明文传输的,尽量不要使用明文传输。
  3. token要有过期时间,不能无限制不过期,APP应该在token过期之前,拿着旧token去换新token,过程同拿密码换token。



作者:不如假如
链接:https://www.jianshu.com/p/951ac8cf5da9
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件设计方案 用户界面设计规范 用户界面:又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件。 GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面。 本系统坚持图形用户界面(GUI)设计原则,界面直观、对用户透明。用户接触软件后对界面上对应的功能一目了然、不需要多少培训就可以方便地使用本应用系统。 1、界面设计介绍 界面设计是为了满足软件专业化标准化的需求而产生的对软件的使用界面进行美化优化规范化的设计分支。 1)软件启动封面设计 应使软件启动封面最终为高清晰度的图像,选用的色彩不宜超过256色,大小多为主流显示器分辨率的1/6大。启动封面上应该醒目地标注制作或支持的公司标志、产品商标、软件名称、版本号、网址、版权声明、序列号等信息,以树立软件形象,方便使用者或购买者在软件启动的时候得到提示。插图宜使用具有独立版权的、象征性强的、识别性高的、视觉传达效果好的图形,若使用摄影也应该进行数位处理,以形成该软件的个性化特征。如果是系列软件还将考虑整体设计的统一和延续性。 2)软件框架设计 软件的框架设计要复杂得多。软件框架设计应该简洁明快,尽量少用无谓的装饰,应该考虑节省屏幕空间,各种分辨率的大小,缩放时的状态和原则,并且为将来设计的按钮、菜单、标签、滚动条及状态栏预留位置。设计中将整体色彩组合进行合理搭配,将软件商标放在显著位置,主菜单应放在左边或上边,滚动条放在右边,状态栏放在下边,以符合视觉流程和用户使用心理。 3)软件按钮设计 软件按钮设计应该具有交互性,即应该有3到6种状态效果:点击前鼠标未放在上面时的状态;鼠标放在上面但未点击的状态;点击时状态;点击后鼠标未放在上面时的状态;不能点击时状态;独立自动变化的状态。按钮应具备简洁的图示效果,名称易懂,用词准确,能望文知意最好,让使用者产生功能关联反应,群组内按钮应该风格统一,功能差异大的按钮应该有所区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值