我创建一个应用程序是检索使用的数据API,需要电子邮件地址和密码认证。
我目前正在将数据以纯文本格式保存到SharedPreferences。
我可以征求你的意见或提出什么建议吗?如何创建优质的登录系统?
附加信息:
用户可以选择在下次打开应用程序时保持登录状态。如果他不选择,我仍然必须保留用户凭据,直到应用程序关闭(由于应用程序运行时的API查询)。
(Java中的Android应用程序)
预先感谢你的想法和意见。
问题
不建议在移动应用中存储纯用户名/密码,因为它不安全。
解决方案
使用基于令牌的身份验证,其工作流程如下:
客户端将用户名/密码发送到服务器
服务器检查用户名/密码是否有效,然后生成令牌并将令牌发送给客户端
客户端将此令牌保存到本地存储,例如File,SharePreference,Database等。并从现在开始使用此令牌来调用API。
益处
不需要存储普通的用户名/密码
如果用户注销并退出应用程序,则可以存储普通用户名。下次他们打开应用程序时,我们可以在登录屏幕上显示用户名(更好的用户体验),他们只需要输入密码即可。
令牌通常有时间过期,这意味着令牌可以生存多长时间。当令牌过期时,你有两种解决方案:
注销该应用程序并显示“登录”屏幕,用户需要输入密码才能获取新令牌
使用刷新令牌获取新令牌
回到你的关注
用户可以选择在下次打开应用程序时保持登录状态。如果他不选择,我仍然必须保留用户凭据,直到应用程序关闭(由于应用程序运行时的API查询)。
当用户选择“不保留下一次登录”选项时,应将其保存到本地存储中
每次用户打开应用程序时,如果此选项为true,则清除令牌,显示“登录”屏幕。
如果此选项为false并且令牌未过期,请转到主屏幕,否则获取新令牌。
更新
如果你无法更改系统的身份验证机制,则应选择以下选项之一:
在此处查看更多信息。
这看起来像是正确的解决方案,但是很遗憾,我没有机会将API服务器更改为令牌身份验证。我必须遵守此设置,并使用电子邮件和密码调用每个API请求。每个API调用都包含SHA-1密码。这意味着将电子邮件和加密的密码存储在SHA-1中就足够了。那么我应该在哪里安全地存储这些值?
@KarelKrýdaplz看到我更新的答案。
现在看起来好多了。我有一个带有名称,电子邮件和密码的加密的SharedPreferences文件,然后是一个具有暗/亮模式,语言,记住我的名字的SharedPreferences文件。谢谢:)
@KarelKrýda很高兴听到这个消息。顺便说一句,如果此答案有用,您可以投票或将其标记为答案,这将有助于我将来改善自己的答案。