大家的 APP 会把用户的账号和密码保存在本地吗? 还是保存 token?

2016-09-20 13:10:58 +08:00
 LSBs
我现在的做法.保存在本地. 如果本地有账号密码则自动登陆. 获取用户信息. 如果没有则跳转到登陆界面. 这样做有什么不好的地方?
10720 次点击
所在节点    iDev
11 条回复
queuey
2016-09-20 13:16:34 +08:00
解包有可能就被解出来了啊。 iOS 的话保存到钥匙串不好么?安卓应该也有类似的东西吧
LSBs
2016-09-20 13:22:05 +08:00
@queuey 我是保存到 keychain 的. 我用的 sskeychain. 用 keychain 的话. 我还是要把账号保存到 usedefault,密码保存到 keychain. 因为 keychain 获取密码是要根据账号来的. 而 keychain 的账号. 根据 keychainserver 获取到的是个数组. 有可能是多个账号. 你是怎样解决这个问题的?
LSBs
2016-09-20 13:23:46 +08:00
@LSBs 我个人感觉 APP 端, 保存账号密码是不安全的. 还是只保存 token.才更安全. 用户第一次登陆的时候保存服务器下发的 token. 服务器端开个可以直接用 token 来登陆的接口.
LSBs
2016-09-20 13:24:00 +08:00
我很疑惑. 不知道自己对不对
GentleSadness
2016-09-20 13:26:27 +08:00
手机经常换 IP ,所以如果用账号密码登录会多次读取数据库,先用账号密码登录一遍,获取 token ,然后 token 保存在 session 里,在短时间内就不用重复读数据库了
LSBs
2016-09-20 13:30:38 +08:00
@GentleSadness 您的意思是 token 的意义在于, 用户登陆后的后续操作.请求不用再带上用户名和密码. 这样服务器可以减少查询数据库. 那我上面的想法 APP 端不保存用户密码, 只保存 token. 服务器开个服务器端开个可以直接用 token 来登陆的接口. 这样可行吗
lslqtz
2016-09-20 17:43:09 +08:00
是的,在浏览器端保存密码容易被 xss 。
queuey
2016-09-20 19:11:29 +08:00
@LSBs 用户名密码为一组 Key 保存在 keychain 里啊。然后 userdefault 中只保存 user 来确保当前登录情况和 ID 。 keychain 目前是安全的,怕就怕中间传输不安全+有别的用心不良的 APP 去撞库,所以要求 key 尽量保证复杂
queuey
2016-09-20 19:14:10 +08:00
@LSBs 用 token 登录是可行的,但是要保证 token 定时刷新即需要 accesstoken 和 refreshtoken 。
shubo83
2016-09-20 21:38:41 +08:00
用户名和密码存储不安全,也不要想着用 cookie/session 的方式来保证需要鉴权 API 的安全性(因为 session 会超时而 APP 有一个需求是比较长的时间是不需要登录的),所以 token 是比较好的选择,配合 mysql 或 redis 或其他存储方式灵活设定超时时间。

我这边的处理方式,欢迎纠错非常感谢:用户名和密码登录时候获取 token , APP 存储,需要鉴权访问的 API 带上这个 token,和 APP 约定超时时间,服务器把 token 以及对应的 user_id 存储在 redis 并设置超时时间,服务器接收这个 token 获得 user_id 进行逻辑处理,如果 token 找不到 user_id(可能 token 错误或 token 已经超时自动删除)就响应 error , app 获得 error 重新登录
LSBs
2016-09-21 08:31:10 +08:00
@queuey 谢谢我,现在就是把用户名存在 use default 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX