Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的用户身份验证-安全实现_Android_Security_Authentication - Fatal编程技术网

Android上的用户身份验证-安全实现

Android上的用户身份验证-安全实现,android,security,authentication,Android,Security,Authentication,到目前为止,我一直在为Android开发较小的应用程序和游戏,但现在我正在开发一个有点大的应用程序,拥有大量用户和比高分更敏感的数据 我通常的方法是为所有具有密码的用户创建一个表,使用HTTP(S)调用通过一个简单的登录屏幕进行身份验证,就这样 不过,对于这个应用程序,我有几点需要改进: 安全传输 如果我想加密用户的密码,我需要在哪里加密?在设备上,甚至在发送之前?(对于不安全的网络,如公共WiFi热点)或更好的服务器,在将其写入数据库之前?还是应该使用SQL的加密 自动登录 我希望用户能够一直

到目前为止,我一直在为Android开发较小的应用程序和游戏,但现在我正在开发一个有点大的应用程序,拥有大量用户和比高分更敏感的数据

我通常的方法是为所有具有密码的用户创建一个表,使用HTTP(S)调用通过一个简单的登录屏幕进行身份验证,就这样

不过,对于这个应用程序,我有几点需要改进:

安全传输

如果我想加密用户的密码,我需要在哪里加密?在设备上,甚至在发送之前?(对于不安全的网络,如公共WiFi热点)或更好的服务器,在将其写入数据库之前?还是应该使用SQL的加密

自动登录

我希望用户能够一直登录到注销-我最好怎么做?不仅是出于安全考虑,还考虑到用户体验

我的研究表明,使用AccountManager最好保存用户名和密码,并在应用程序启动时自动进行身份验证。还有什么别的吗,我在这里遗漏了什么安全风险

访问控制

通常,我只希望应用程序发出的每个呼叫都是有效的,因为用户只有在登录屏幕上才能登录。但如何最好地验证用户的请求,以确保它不是攻击者?我不能只发送每个请求的用户名/id,所以我可能需要在每次登录时生成一个会话令牌?还是有更好的方法


还有什么我忘了考虑的吗?

我建议您不加密密码,而是通过https传输密码。另一种方法是在应用程序中实现,并使用从服务器接收的公钥加密密码

在服务器端,我会使用一些带salt的散列算法对密码进行散列。只储存杂碎和盐。当用户登录时,您可以以相同的方式对传入密码进行哈希运算,并检查哈希值是否相等

要进行自动登录,您需要使用令牌对来自授权用户的所有请求进行签名。成功登录后您将从服务器收到的令牌。此令牌可以存储在密钥库中,也可以存储在仅可供此应用程序访问的特殊存储中

签名可以通过使用来自所有请求参数和令牌的校验和附加到请求附加参数来实现


此外,我建议您考虑一下未经授权的克隆应用程序,它们可以假装是您的应用程序并调用您的服务器端API。

谢谢您的建议,尽管我不太确定我还能做些什么来阻止任何人提出请求-如果他们无法登录,他们就无法获得令牌,也无法做任何事情,对吗?是的,没错。另一种解决方案是生成已签名的APK,并使用密钥库中的密钥对API的请求进行签名。这样你就可以放弃所有未经授权的请求。