V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
LSBs
V2EX  ›  iDev

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

  •  
  •   LSBs · 2016-09-20 13:10:58 +08:00 · 10719 次点击
    这是一个创建于 3017 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在的做法.保存在本地. 如果本地有账号密码则自动登陆. 获取用户信息. 如果没有则跳转到登陆界面. 这样做有什么不好的地方?
    11 条回复    2016-09-21 08:31:10 +08:00
    queuey
        1
    queuey  
       2016-09-20 13:16:34 +08:00
    解包有可能就被解出来了啊。 iOS 的话保存到钥匙串不好么?安卓应该也有类似的东西吧
    LSBs
        2
    LSBs  
    OP
       2016-09-20 13:22:05 +08:00
    @queuey 我是保存到 keychain 的. 我用的 sskeychain. 用 keychain 的话. 我还是要把账号保存到 usedefault,密码保存到 keychain. 因为 keychain 获取密码是要根据账号来的. 而 keychain 的账号. 根据 keychainserver 获取到的是个数组. 有可能是多个账号. 你是怎样解决这个问题的?
    LSBs
        3
    LSBs  
    OP
       2016-09-20 13:23:46 +08:00
    @LSBs 我个人感觉 APP 端, 保存账号密码是不安全的. 还是只保存 token.才更安全. 用户第一次登陆的时候保存服务器下发的 token. 服务器端开个可以直接用 token 来登陆的接口.
    LSBs
        4
    LSBs  
    OP
       2016-09-20 13:24:00 +08:00
    我很疑惑. 不知道自己对不对
    GentleSadness
        5
    GentleSadness  
       2016-09-20 13:26:27 +08:00 via Android
    手机经常换 IP ,所以如果用账号密码登录会多次读取数据库,先用账号密码登录一遍,获取 token ,然后 token 保存在 session 里,在短时间内就不用重复读数据库了
    LSBs
        6
    LSBs  
    OP
       2016-09-20 13:30:38 +08:00
    @GentleSadness 您的意思是 token 的意义在于, 用户登陆后的后续操作.请求不用再带上用户名和密码. 这样服务器可以减少查询数据库. 那我上面的想法 APP 端不保存用户密码, 只保存 token. 服务器开个服务器端开个可以直接用 token 来登陆的接口. 这样可行吗
    lslqtz
        7
    lslqtz  
       2016-09-20 17:43:09 +08:00 via iPhone
    是的,在浏览器端保存密码容易被 xss 。
    queuey
        8
    queuey  
       2016-09-20 19:11:29 +08:00
    @LSBs 用户名密码为一组 Key 保存在 keychain 里啊。然后 userdefault 中只保存 user 来确保当前登录情况和 ID 。 keychain 目前是安全的,怕就怕中间传输不安全+有别的用心不良的 APP 去撞库,所以要求 key 尽量保证复杂
    queuey
        9
    queuey  
       2016-09-20 19:14:10 +08:00
    @LSBs 用 token 登录是可行的,但是要保证 token 定时刷新即需要 accesstoken 和 refreshtoken 。
    shubo83
        10
    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
        11
    LSBs  
    OP
       2016-09-21 08:31:10 +08:00 via iPhone
    @queuey 谢谢我,现在就是把用户名存在 use default 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:51 · PVG 20:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.