不管做什么类型的App,都缺少不了登录这一模块。登录涉及到用户的信息、隐私安全,这是App中数据安全的重要部分,那么如何保证数据安全呢?
首先要明确的是不能采用明文存储和传递用户密码,这是很容易被截获破解掉的。所以常见的方法是在用户登录时,根据用户信息(账号、密码、身份认证方式、手机号、登录时间等)数据生成一串随机字符作为授权码,即用户令牌token。这个字符串只需要保证其唯一性。 服务器端会保存这个字符串,用作验证。
用户登录时密码经过加密后暗文传递,不做任何缓存。登录验证成功后台会返回token,token具有有效期限。之后用户在访问任何接口时token都需要作为公共参数传入,后台会与数据库中token作对比,验证成功、错误或过期。这样不仅能保证登录时的密码安全,也能保证接口不被恶意访问,造成服务器负荷过大。
还可以使用token来验证多端登录,当一台设备登录时上一次登录的token即失效,这样可以有效防止多台设备同时登录。
根据用户的登录需求不同,token的使用方式也是多样的,主要有以下几种:
1.短期登录
针对短期登录,token的有效期从几分钟到几个星期不等,比如敏感的银行、股票类App登录,有效期只有十来分钟。阅读类App可能是几天。
这种一般的处理方式就是在本地持久化token,用户下次使用App是直接读取本地token访问接口,如果token过期则重新登录,重新获取存储token。
2.长期登录
有的App希望可以保持用户粘性,一次登录可以很长时间使用。这种一般token有效期为一年。
还有一种处理方式是返回两个token,一个是origin token, 另外一个是refresh token。当origin token过期后,将origin token和refresh token同时传入后台,如果验证通过就返回两个新的令牌。这样也可以保证不用登陆就可以一直访问App。
3.第三方授权登陆
第三方登陆相对来说较为复杂一些,一般是用户先获取未授权的request token,用户允许第三方登陆后用未授权的request token获取授权的request token,然后用户输入第三方用户名、密码,已授权的request token作为参数传入,第三方验证成功后返回access token,用户使用access token作为令牌。