我正在构建一个本机应用程序,它将与我也编写/管理的API进行交互。我已经找到了用于实施此流程的Auth0文档,但不确定如何保存令牌。我想确定要钉牢此步骤,因为如果我做的不正确,我认为它有可能极大地降低流程的安全性。
据我了解,这是流程(没有错误处理,为简洁起见,只有高兴路径):
问题:
我是否存储该令牌?我不希望我的用户每次使用该应用程序时都必须登录。如果我确实存储令牌,该将令牌存储在哪里?
如果我不存储它,该怎么办?每次他们打开应用并获取新令牌时,我都使用Auth0 ping身份验证/授权端点吗?
说我要存储令牌,如果我使用ID令牌存储用户数据,是否应该定期再次访问API以保持其最新状态?仅当用户再次打开应用程序时?直到他们触发应用程序中的更改?
我应该使用ID令牌获取用户ID并ping我的数据库来代替用户数据,而不是使用ID令牌存储用户数据吗?
我具有该流程的基础知识,并且可以对其进行沙箱处理,但是我想开始将适用于生产的应用程序逻辑应用于此流程,这就是我要坚持的地方。我在这里有点迷路,所以任何帮助都是很好的帮助。
谢谢!
答案 0 :(得分:1)
以下是使用Auth0时您的问题的简短答案:
2&3。参见上文,但要添加更多信息,您可以将令牌配置为具有有效期限。从理论上讲,您可以将此“有效期从开始”转换为日期对象,并且可以执行以下两项操作之一:您可以在到期后使用“刷新令牌”(原件随附)来请求新令牌,也可以强制用户此时重新登录并重新发行新令牌(我希望后者可以防止他人只要保持登录状态就可以永久地更新令牌)
如果您愿意,我可以提供更多详细的示例,如果我误解了任何问题并给出了多余/错误的答案,我深表歉意
编辑:有关对密钥使用安全存储的资源
何时使用内存存储与持久存储的文档。如果密钥预计在标准会话持续时间之前到期,则TL; DR在内存中使用,并且在会话之间持久存储密钥 https://hackernoon.com/mobile-api-security-techniques-682a5da4fe10
链接到SharedPreferences文档 https://developer.android.com/reference/android/content/SharedPreferences.html
答案 1 :(得分:1)
AsyncStorage是一个简单的,未加密,异步,持久, 应用程序全局的键值存储系统。 [1]
您可以将其存储在AsyncStorage中,但这本身并不一定是安全的位置(例如,未加密,可以在有根设备上访问...)。通常,客户会发出访问令牌,访问令牌的持续时间从几个小时到几天不等,这些令牌将为其所有者提供对您的API资源的访问权限。如果您的登录屏幕后面有敏感数据,则最好重新执行auth-flow并在登录时使较旧的访问令牌无效。