身份验证是验证用户身份的过程。在应用程序中,它是体验的门户。身份验证实施不当会损害安全性并使用户感到沮丧。本指南介绍了实施安全、用户友好的身份验证的方法、协议和最佳实践。
什么是身份验证
身份验证回答了“你是谁?”的问题。它与授权不同,授权会回答“你能做什么?”用户通常使用他们知道的东西(密码)、他们拥有的东西(电话)或他们的身份(生物识别技术)来证明他们的身份。
身份验证的重要性
如果没有适当的身份验证,任何人都可以访问私人数据。泄密、欺诈和滥用都是可能的。产品声誉和用户信任受到威胁。
验证方法
用户名和密码
传统方法。实施简单,但如果密码较弱或存储不正确,则容易受到攻击。
社交登录
通过谷歌、苹果、Facebook 登录。对于用户来说速度很快,将安全性委托给值得信赖的提供商。减少注册过程中的摩擦。
魔法链接
通过电子邮件发送的链接,单击时进行身份验证。消除密码,但依赖于电子邮件访问。
OTP(一次性密码)
通过短信或电子邮件发送代码。短期有效。常见为第二因素。
生物识别
指纹、面容 ID。在支持它的设备上提供最大的便利。本地存储,而非共享存储。
密钥
消除密码的新标准。使用公钥加密技术。苹果、谷歌和微软都支持它。
协议和标准
OAuth 2.0
默认为委派授权。允许应用程序无需接收密码即可访问资源。社交登录基础。
OpenID 连接
[OAuth12.0 之上的身份层。将身份验证添加到授权流程中。
SAML
SSO 的企业标准。基于 XML。常见于企业环境中。
JWT(JSON Web 令牌)
带有签名声明的令牌。无状态,可由服务器验证,无需查询数据库。
典型的身份验证流程
- 用户提供凭据。
- 服务器验证并生成token。
- Token存储在设备上。
- 请求在标头中包含令牌。
- 服务器验证令牌并授权访问。
令牌:访问和刷新
访问令牌
用于访问 API 的短期令牌。很快就会过期(几分钟到几小时)。
刷新令牌
用于获取新访问令牌的长期令牌。安全保存。允许长时间会话而无需重新验证。
代币轮换
刷新令牌每次使用都会生成一个新的刷新令牌。如果其中一个被泄露,它将在下一次轮换时失效。
安全存储
iOS 钥匙扣
用于存储敏感数据的本机 API。由系统加密。用于令牌和凭证。
Android 密钥库
类似于钥匙扣。存储加密密钥并提供硬件保护(如果可用)。
加密的共享首选项
对于 Android,更简单的替代方案。加密 SharedPreferences 中的数据。
绝不是纯文本形式
不要将令牌存储在本地文件、日志或代码中。攻击者可以轻松提取它。
多重身份验证 (MFA)
这是什么
需要多种因素进行验证。例如,你知道的东西+你拥有的东西。
为什么使用
即使密码被泄露,攻击者也需要第二个因素。显着提高安全性。
常见实现
- SMS OTP(安全性较低,易受 SIM 交换影响)。
- 通过身份验证器应用程序(Google Authenticator、Authy)进行 TOTP。
- 推送通知以批准登录。
- 生物识别作为第二个因素。
登录安全
速率限制
限制登录尝试。防止暴力。
帐户锁定
多次失败后封锁帐户。与速率限制相结合。
验证码
区分人类和机器人。增加摩擦力,请谨慎使用。
异常检测
识别可疑登录:新位置、新设备、异常时间。需要额外验证。
用户体验
最小化摩擦
脚步越多,放弃就越多。社交登录和生物识别减少了摩擦。
提醒用户
长时间的会话会阻止频繁的重新身份验证。使用刷新令牌。
明确的反馈
具体错误消息(出于安全原因)。 “电子邮件或密码不正确”比“身份验证错误”更好。
帐户恢复
清晰的密码重置流程。电子邮件、短信或安全问题。
社交登录:优点和缺点
优势
- 快速注册,更少字段。
- 用户不再创建密码。
- 提供商负责安全。
缺点
- 对第三方的依赖。
- 用户可能有隐私问题。
- 如果提供商出现故障,登录将变得不可用。
良好实践
提供选项:社交+传统。允许链接多个方法。不要强制社交登录。
使用 Apple 登录
强制
如果应用程序提供社交登录,Apple 会要求其提供“使用 Apple 登录”功能。应用商店规则。
隐藏我的电子邮件
用户可以隐藏真实的电子邮件。应用程序从 Apple 接收中继地址。
实施
使用 AuthenticationServices 框架。与 [OAuth2 类似的流程。
万能钥匙:未来
他们是如何工作的
公钥/私钥对。私钥保留在设备上,从不传输。通过密码质询进行身份验证。
优势
- 抵御网络钓鱼。
- 没有密码可以泄露。
- 在用户设备之间同步。
收养
苹果、谷歌和微软都支持它。 FIDO2/WebAuthn 标准。越来越多的采用。
会话和注销
会话管理
跟踪活动会话。允许用户查看和撤销。
安全注销
使服务器上的令牌无效。擦除设备中的敏感数据。
不活动超时
闲置一段时间后注销。平衡安全性和便利性。
常见错误
纯文本密码
切勿在未经哈希处理的情况下存储密码。使用 bcrypt、scrypt 或 Argon2。
没有过期令牌
永恒的代币就是风险。始终设置过期时间。
仅客户端验证
所有验证都必须在服务器上进行。客户可以被操纵。
泄露错误信息
“用户不存在”与“电子邮件未注册”泄露信息。通用。
结论
安全身份验证平衡了保护和用户体验。使用既定协议、实施 MFA、正确存储代币并最大程度地减少摩擦。万能钥匙代表着未来,但密码仍然占据主导地位。为当今的现实而构建,同时为进化做好准备。
##常见问题解答
1) 智威汤逊安全吗? 是的,如果实施正确的话。使用 HTTPS、验证订阅、设置较短的过期时间。
2) 我应该提供短信登录吗? 作为第二个因素,有总比没有好。但 TOTP 验证器比 SMS 更安全。
3) 必须使用 Apple 登录吗? 如果您提供任何社交登录,是的。这是应用商店的规则。
4) 访问令牌应持续多长时间? 这取决于上下文。 15-60 分钟是常见的。刷新令牌更新会话。
5) 生物识别技术用于身份验证安全吗? 是的。生物识别数据保留在设备上并且永远不会传输。既方便又安全。
另请阅读
- [应用程序中的身份验证 - 使用清单的最佳实践3
- [应用程序中的社交登录:实施和最佳实践4
- [社交登录实践:在应用程序中实施之前的决策路线图5
- 【应用安全:移动防护指南6
- [应用程序中的身份验证 - 最佳实践与示例7
- [Android 原生开发:Kotlin 完整指南8
