java - 在手机和服务器之间创建用户认证系统的步骤

标签 java ios ssl encryption https

第一次从移动应用程序安全登录到服务器(内置 Java)。我想知道我是否做对了。

首次登录:
1. 在移动设备上硬编码安全短语(例如:“superSecurePhrase@@!!”。
2. 输入用户名和密码。
3. 使用base64对username+phrase和password+phrase进行编码。
4. 使用 https 将此信息发送到我的服务器。
5. 在服务器上使用 base64 与设备上硬编码的匹配短语进行解码。
6. 哈希密码并保存到数据库,同时哈希用户名并保存到数据库。
7.使用AES算法创建 session token
8. 将 session token 发送到设备。
9. 将 session token 保存到数据库,当用户请求某些东西时,确保它们匹配。

要验证凭据,除了不保存用户名和密码外,它几乎是相同的过程,而是查询数据库并检查匹配项?

这是用于此类事情的通用模式吗?

潜在漏洞:
1. 物理访问设备以检索硬编码的 base64 短语?
2. SSL嗅探获取token?

感谢您的帮助。

最佳答案

如果我在你那里,我会在注册时使用设备上的 SHA-1/SHA-2 散列密码。这样我将只发送哈希。如果请求被中间人拦截,即使他们解码了 Base64 编码的字符串,他们也只有哈希。作为最终用途,如果有人知道我的原始密码,我会感到害怕,因为我在其他地方使用它(我知道这是一种不好的做法)。您仍然可以使用盐对哈希进行 Base64 编码。

您可以使用您的“superSecurePhrase@@!!”在 SHA-1/2 编码期间对您的密码字符串加盐,或者为此单独加盐。

token 在每一代都应该是随机的(它在过期之前保持不变),我会使用类似 org.apache.commons.lang.RandomStringUtils 的东西,假设您在后端使用 Java。

在应用程序方面,我会将 token 存储在共享首选项中,如果设备未获得 root 权限,则其他应用程序无法访问它。如果是,并且用户允许 root 访问该应用程序,您将无能为力。如果您已经在应用程序中使用数据库,那么存储在数据库中也是可以的。

因此,总而言之,最大的区别是我更愿意在设备上创建密码哈希并仅通过 SSL 发送用户名和哈希。

关于java - 在手机和服务器之间创建用户认证系统的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654787/

相关文章:

Java:各种精度数据的简单格式标准

java - 我如何使用 java 在不进行身份验证的情况下发送电子邮件

java - 将嵌入式 Glassfish 与 Maven 结合使用

ios - 我知道项目中的库存在链接器错误

ios - SceneKit – 在同一个 SCNView 中显示多个场景

ios - AVAssetWriterInputPixelBufferAdaptor 返回空像素缓冲池

Facebook JavaScript SDK 通过 HTTPS 加载非安全项目

java - SSL DB2 连接失败

java - 为什么缺少注释不会在运行时导致 ClassNotFoundException?

google-chrome - ECC 证书在 Chrome 中不起作用?