客户端登录 - 如何在客户端安全地存储凭据?

Ben*_*Ben 17 security api social login

由于许多API通过用户/密码组合远程访问他们的数据,我想知道这是保存这些价值,高度安全的方式(即使100%是不可能的)的最佳方式,以便直接连接它们而无需每次都询问对于那些.

Rob*_*ier 16

我推荐三种方法之一:

  • 完全避免使用身份验证令牌存储密码.在此模型中,用户登录一次,服务器生成一个唯一的,大的稀疏令牌,客户端可以将其存储并用作其登录"密码".服务器一次只接受来自一个客户端的此令牌,因此如果两个客户端尝试同时使用它,则令牌无效.一段时间后(1周,2周,一年,任何适当的时间),令牌通常也会失效.当令牌无效时,用户必须再次手动登录并重复该过程.这基本上是Gmail和类似网站登录的方法.

  • 如果您必须存储密码,我建议您依靠操作系统为您管理密码.Windows和Mac都具有良好的安全存储系统(分别为DPAPI和Keychain).但是,Linux没有一个好的始终可用的解决方案,因此它取决于您的市场.使用操作系统的优势在于操作系统可以提供您自己无法轻松提供的保护,用户可以集中管理操作系统存储的整体保护(使用智能卡等),达到您不太可能重现的水平.OS安全存储通常对用户来说非常方便.

  • 如果这些都不是选项,则存储加密文件,其中包含用户每次启动应用时必须输入的主密码.这就是Firefox的工作原理(或者至少它是我上次看过的,已经有一段时间了).这是相当安全的,但对用户来说不太方便(低便利性通常意味着用户采用率低,或者通过更简单的密码使用不当等).我会调查Firefox代码作为如何实现它的一个例子.