【问题标题】:How can I securely store user credentials for my app如何安全地为我的应用存储用户凭据
【发布时间】:2018-04-21 16:33:55
【问题描述】:

我有一个 Android 应用程序,它允许用户通过他们的 API 与第三方服务进行交互。此 API 使用基本身份验证,因此每次 API 调用我都需要用户的用户名和密码。理想情况下,我不想在本地存储用户的凭据,因为这非常不安全。我对身份验证了解不多,但这是我认为理想的解决方案:

  • 用户向此服务提供一次凭据以进行验证
  • 验证后,我将用户的凭据发送到后端服务以存储它们,这给了我一个身份验证令牌。我将此令牌存储在本地(这里加密重要吗?)
  • 每当我想在以后调用此服务时,我都会使用此身份验证令牌与后端服务通信,后端服务会为我提供用户的用户名/密码以进行基本身份验证以进行 API 调用

这是一个好的解决方案吗?如果是这样,我可以使用后端服务来促进这个过程吗?我查看了 Firebase 身份验证,但我不知道它是否满足我的需求,因为我正在尝试存储第三方服务的凭据,而不是专门为我的应用程序。我听说过 Auth0,这可能是我正在寻找的东西,但对于像我这样的小应用程序来说似乎有点矫枉过正。

【问题讨论】:

  • 你看过 firebase 甚至 parse-server 吗?

标签: android authentication firebase-authentication basic-authentication auth0


【解决方案1】:

您可以轻松使用 Firebase 身份验证并获得所需的所有功能,同时确保用户安全。它提供了您需要的功能:

  1. Firebase 支持密码身份验证,并根据行业标准正确存储散列/加盐密码凭据。这将是 createUserWithEmailAndPasswordsignInWithEmailAndPassword 的一个 API。
  2. Firebase 提供了一种验证电子邮件地址的机制。也是一种API:user.sendEmailVerification()
  3. 登录时,Firebase 身份验证会返回一个 ID 令牌 (user.getIdToken()),您可以使用它在所有经过身份验证的请求中识别您的用户。他们还提供了一个 Admin SDK 来解析和验证该令牌 (auth.verifyIdToken(idToken))。还提供了一个刷新令牌以在到期时不断刷新 ID 令牌。这意味着会话是无限期的,用户无需在设备上再次登录。
  4. ID 令牌提供额外的用户数据,例如 email_verified,您可以使用这些数据来确保用户得到验证。 ID 令牌是一个 JWT,没有 Firebase 身份验证后端私钥就无法破解。

【讨论】:

  • 如果凭据是用户名/密码,而不是电子邮件/密码,这将如何工作?
  • 嗯,我错过了那部分。如果要发送电子邮件验证,则需要在注册时提供电子邮件。您只需要一个映射:用户名 电子邮件。您可以使用 Firebase 实时数据库来存储该映射。因此,当用户在创建帐户后登录时,他们会提供用户名并通过。您会收到相应的电子邮件和signInWithEmailAndPassword。这可能需要一些工作,但它比自己存储电子邮件/传递凭据要容易/安全得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2010-12-07
相关资源
最近更新 更多