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

时间:2009-10-01 12:56:06

标签: security api login social

由于许多API通过用户/密码组合远程访问其数据, 我想知道这是存储这些价值,高度安全的方式的最佳方式(即使100%是不可能的),为了直接连接它们而不是每次都要求它们。

3 个答案:

答案 0 :(得分:16)

我推荐三种方法之一:

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

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

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

答案 1 :(得分:1)

最好的方法是依靠别人来存储它们并相信那个派对。但是,如果你必须有控制权,我建议你阅读一本关于安全系统的好书,然后重新思考。有许多变量需要考虑,大多数时候你只是降低风险与成本。

答案 2 :(得分:0)

KeePass甚至可以为开发人员提供API