Auth0:关于移动应用程序令牌存储和流的具体问题

Auth0: Specific questions about token storage and flow for mobile app

我正在构建一个反应本机应用程序,它将与 API 交互,我也 write/manage。我找到了用于实现此流程的 Auth0 文档,但我不确定 where/when 是否可以保存令牌。我想确定我完成了这一步,因为我觉得如果我没有正确执行它,它有可能大大降低流程的安全性。

这是我理解的流程(没有错误处理,为了简洁起见只有快乐路径):

问题:

我掌握了此流程的基础知识,并且能够对其进行沙盒处理,但我想开始将生产就绪的应用程序逻辑应用于此流程,这就是我遇到的问题。我在这里有点迷路,所以任何帮助都是很好的帮助。

谢谢!!

以下是您在使用 Auth0 时遇到的问题的简要回答:

  1. 是的!您存储它,存储令牌的最安全方式是在您设备的本地存储中,这样它就不会保存在应用程序状态或全局变量中。

2&3。见上文,但要添加更多信息,您可以将令牌配置为具有到期长度。从理论上讲,您可以将此 'expiry time from inception' 转换为日期 object,并且可以执行以下两项操作之一;您可以在到期后使用刷新令牌(原始令牌随附)请求新令牌,或者强制用户 re-log 进入并在此时重新发出新令牌(我更喜欢后者,防止人们只要保持登录状态就永远更新他们的令牌)

  1. 登录后使用授权令牌请求用户信息,这可以存储在应用程序中state/global variables/wherever。然后,您希望在授权 Header 中为每个 API 调用使用身份验证令牌,以及您发送的任何数据。这确保即使有人在应用程序内部,他们也需要有一个有效的令牌才能实际执行任何涉及数据的操作(想象一下有人 back-dooring 进入您的应用程序并跳过授权,或者使用邮递员之类的东西来敲打您的 API 垃圾)。它会像这样工作: GET userData { Header: auth token } -> GET userProfile(通过发送从 GET userData 返回的用户 ID) PLUS {Header: auth token }

如果您愿意,我可以提供更深入的示例,如果我误解了任何问题并给出了 redundant/incorrect 个答案,我深表歉意

编辑:关于使用密钥安全存储的资源

何时使用 in-memory 存储与持久存储的文档。 TL;DR 使用 in-memory 如果密钥预期在标准 session 持续时间之前过期,并且在 session 之间持久存储密钥 https://hackernoon.com/mobile-api-security-techniques-682a5da4fe10

link 钥匙串服务文档 https://developer.apple.com/documentation/security/keychain_services#//apple_ref/doc/uid/TP30000897-CH203-TP1

link 到 SharedPreferences 文档 https://developer.android.com/reference/android/content/SharedPreferences.html

AsyncStorage is a simple, unencrypted, asynchronous, persistent, key-value storage system that is global to the app. [1]

您可以将它存储在您的 AsyncStorage 中,但这本身不一定是安全位置(例如,未加密,可在获得 root 权限的设备上访问...)。通常,客户会颁发持续数小时到几天不等的访问令牌,这些令牌将为其所有者提供对您的 API 资源的访问权限。如果您的登录屏幕后面有敏感数据,您最好重新执行身份验证流程并在登录时使旧的访问令牌无效。