我想通过允许用户创建用户名和密码来认证用户。由于我只找到有关它的旧文章,因此我正在创建此文章。
在发送到服务器之前,我应该对密码进行加密吗?如果是这样,我该怎么办?如果没有,我应该在对服务器的POST请求中使用一些特定的配置吗?
我应该使用任何可靠的第三方api吗?
我知道Google拥有用于此功能的androidx API,但仍处于Alpha状态。
如果您使用HTTPS协议与服务器通信,则在发送数据之前已经对数据进行了加密,无论如何,我建议您使用Cipher进行其他加密。
PS请查看此问题以获取更多How to encrypt String in Java
[您可能会进行基本的混淆,例如Base64或类似的东西,就像Marco提到的那样,HTTPS已经确保了通道的安全,中间的人将看不到信息。
代替加密,您可以添加一个安全验证,以确保HTTPS证书是受信任的,因此也禁止使用诸如Charles Proxy之类的代理。
加密采用需要安全分发的加密密钥。由于需要将密码(或密码的衍生物)存储在服务器端以进行后续身份验证,因此我建议至少在注册用户名/密码时以明文形式发送密码。当然,假设使用HTTPS强制执行安全协议和主机名验证。这样做的好处是,您无需向服务器API的特定算法添加隐式依赖关系。相反,当在数据库中存储密码(或派生密码)时,服务器应用程序可以将其隐藏为内部详细信息。这使API的开发过程不再那么痛苦。
[通常建议使用证书固定(即,对服务器证书客户端进行“硬编码”,但是根据您的使用情况,这可能会过度设计,因为这将需要证书生命周期管理。
所有这些都说。至少在短期内,您可能会受益于使用第三方服务(例如AWS Cognito)进行身份验证。