【问题标题】:Android apps persistent authenticationAndroid 应用持久认证
【发布时间】:2014-05-15 19:28:29
【问题描述】:

我最近开始玩弄一个 android 应用程序,我已经到了希望它与 Web 服务通信的地步,我完全理解如何以不安全的方式做到这一点,我有点被绊倒了关于安全性。

我希望它像我手机上的 facebook 应用一样工作,它始终处于登录状态,似乎永远不会过期。

我的第一个想法是使用 User / Pass 并使用 SSL 加密将它们本地保存在手机上。但这可能是一个安全问题,丢失的手机被植根,然后人们可以看到登录并通过(即使它们被散列/加密,这似乎是一个问题)

我的另一个选择是使用 Oauth 1a/2,但如果我没记错的话,这似乎有同样的问题,除了使用 auth 令牌,这意味着除了在 api 层之外会出现同样的问题。

我也研究了 androids accountManager,但我打算为 iOS 制作这个,所以我想对两者都使用通用做法。

你们觉得呢?

一般问题:

  1. 刷新 Oauth 令牌与再次登录是一样的,还是只是一个新的 Oauth 令牌?

  2. 有没有办法从手机中获取唯一 ID 以检测“新手机”是否正在使用?

  3. 有谁知道 facebook 或 google 如何在他们的设备上处理他们的身份验证/授权?他们只是简单地存储一个永不过期的身份验证令牌,还是在它到期时发布一个新令牌?

我猜我认为 Android 应用程序似乎很容易受到“如果有人发现一个漏洞可以在没有 root 访问权限的情况下提取身份验证令牌怎么办?”换位思考,我这样想错了吗?

我是否也错误地认为,如果有人获得了我的令牌,唯一会阻止他们通过 api 访问我的帐户的方法是,如果我访问并使用了 api,它会将我的 Oauth 更新为新值以使我的旧值一个过时的? (假设没有可靠的方法来判断哪个设备是哪个)

【问题讨论】:

    标签: android ios authentication oauth


    【解决方案1】:

    是的,在设备上存储用户/密码是不可能的。查看this 了解有关令牌如何工作的一些详细信息。

    您想要做的是在用户登录后从您的服务器获取一个 OAuth 令牌,将其存储并使用它来签署您的所有请求。如果其他人获得了您的令牌,您可以将其无效,这样他们将无法代表您执行任何更多请求。

    关于您的问题:

    1. 使您的令牌失效与您登出类似。刷新(将令牌交换为新令牌)就像再次登录一样。
    2. 是的,你可以找到here
    3. 我已经在我的应用程序上使用 FB 和 Twitter 实现了身份验证 之前,它的工作方式是,在用户认证后,你会得到一个 短期代币,您可以用它换取长期代币。你 然后将其存储在设备上并用于将来的请求。 更多信息 here

    【讨论】:

    • 好吧,所以 Oauth 的想法并不是在漏洞方面更安全(因为用户/密码也有同样的问题),而是在保护用户的实际用户名和密码,如果它被泄露,您只需更新/使令牌无效。
    • 是的。您不必存储用户凭据,也不必每次打开应用程序时都通过网络传输它们。
    • 看看this answer。您可能会发现它很有帮助。
    猜你喜欢
    • 2021-04-24
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多