V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cloverzrg2
V2EX  ›  程序员

如何设计 APP 的 面容/指纹 登录的安全机制?

  •  
  •   cloverzrg2 · 2020-05-08 13:19:13 +08:00 · 2523 次点击
    这是一个创建于 1651 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们新开发的 app 支持 Android/IOS 的面容 /指纹登录(以下只提指纹),目前的做法是,登录后,在本地保存用户的密码,指纹登录时,在指纹验证通过后,读取保存的密码,调用密码登录接口实现登录,这样肯定是不安全的,要改。

    我们希望实现以下安全保障:

    • 本地不保存密码,或对密码进行加密,确保 app 数据被拿到( Android 在 root 后就能拿到)也不能获取其密码
    • app 数据复制到其他手机,也不能使用
    • 用户密码修改后,指纹登录失效,需要重新输入密码

    我们 token 的有效期比较短,用户一天可能要登录几次。想知道招行、工行、云闪付等类似的 app 是怎么做这块的

    7 条回复    2020-05-08 14:49:03 +08:00
    ydatong
        1
    ydatong  
       2020-05-08 13:30:46 +08:00 via iPhone
    iOS 密码保存到 keychain 里面就行了吧
    cloverzrg2
        2
    cloverzrg2  
    OP
       2020-05-08 13:34:40 +08:00
    @ydatong #1 我是后端程序员,叫我看看这块,iOS 或者 Android 的开发不太懂
    leoskey
        3
    leoskey  
       2020-05-08 13:45:40 +08:00   ❤️ 1
    首次登录,用密码换取 token,用 token 登录。
    xuanbg
        4
    xuanbg  
       2020-05-08 13:53:58 +08:00
    面容可以集成第三方验证,后端调用第三方接口获取验证结果。指纹只能客户端保存密码,然后用指纹去获取密码进行普通的用户名 /密码方式登录。
    also24
        5
    also24  
       2020-05-08 14:13:59 +08:00   ❤️ 1
    目标 1 - 本地不保存密码:
    可以考虑参考 OAuth 2.0 的 Refresh Token 机制,设置一层 Login Token


    目标 2 - app 数据复制到其他手机,也不能使用:
    这个只能将当前系统环境的参数,或自己生成的类似 UDID 的参数一起传参,并在校验 login token 的时候一并校验。
    这招不能防范恶意篡改。

    目标 3 - 用户密码修改后,指纹登录失效,需要重新输入密码:
    合理规划 Login Token 的吊销机制即可,方案很多。
    cloverzrg2
        6
    cloverzrg2  
    OP
       2020-05-08 14:47:11 +08:00
    @ydatong #1 Android 看起来可以放在 keystore,https://developer.android.com/reference/java/security/KeyStore
    ydatong
        7
    ydatong  
       2020-05-08 14:49:03 +08:00 via iPhone
    @cloverzrg2 嗯,iOS keychain 也是专门用来保存密码的,app 卸载了再安装也可以获取到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:02 · PVG 12:02 · LAX 20:02 · JFK 23:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.