的计划:为Android应用程序登录系统
我开发在很大程度上数据库驱动的Android应用程序(如中,大部分的内容通过一个RESTful服务层是从MySQL数据库中提取我的网络服务器)。
在可以对API请求数据进行任何调用之前,用户必须通过将凭据传递给数据库进行身份验证来进行身份验证。如果用户被验证,我会传回授权令牌。如果用户选择了“记住我”选项,该令牌将被保存在本地以供将来使用。
所有将来的API调用都需要包含此授权令牌。
当用户希望注销时,会将呼叫发送回API以从数据库中删除该令牌,从而使其无效以供将来使用。令牌的本地副本也会被删除。
的问题
如果用户不注销,并直接关闭应用程序(家庭或后退按钮),并没有足够的“记住我”选项选中,我想销毁服务器上的令牌。如何才能做到这一点?
可能的解决方案#1
- 如果有
onExit
事件触发应用程序退出时,请对API让它知道摧毁令牌的呼叫。 用这种方法
的问题是:
- 请问这种情况存在,这是保证在所有 条件来提高(home键,返回键,程序崩溃(我能活 没有这个))?
可能的解决方案#2
- 维护数据库中的一个
time of last activity
列。如果自上次活动后致电x min
,该令牌将被视为过期。
使用这种方法的问题是:在每个API调用更新数据库中的时间列的
额外开销。
此外,我现在必须存储在数据库中,如果用户选择要记住,因为在那种情况下令牌不能过期。
你会实行这两种解决方案?还是有另一种更好的方式来实现这种机制?
如果您建议#1,请告诉我哪个事件会符合我的目的。
当用户没有选择“记住我”选项时,为什么要在服务器上保存授权令牌?您的授权请求可能包含1)凭证2)“记住我”选项。只有在选择选项时才记住标记。 – Flavio
我一直在想,一旦我收到了证书并验证了用户,发出令牌就不需要每次进行API调用时都要将用户名和密码传递给服务器,从而使其更安全。令牌将是临时的,而密码更持久。此外,拥有令牌可以让用户远程登出任何设备。 (访问朋友的电话,忘记注销) – xbonez