存储 OAuth 和其他身份验证令牌

信息安全 oauth Facebook
2021-09-05 00:20:41

我们都知道,在存储密码的时候,我们应该使用单向哈希来存储它,例如 SHA、bcrypt 或 scrypt 的一种变体,以防止数据库被黑客入侵时明文密码泄露。

但是 OAuth 令牌呢?应该如何存储 Facebook 访问令牌?Twitter 访问令牌?我应该将其存储为纯文本吗?使用 AES 和站点密钥对其进行加密?或者任何更安全的存储方式?

(前提是应用程序只向 Facebook 请求了必要的令牌范围,并且应用程序有充分的理由存储令牌)

1个回答

如果可能,请不要存储 OAuth 令牌!存储 OAuth 令牌会使您的用户容易受到他们不知道的攻击媒介的影响。

如果您必须存储 OAuth 令牌,则 AES 使用您可用于此目的的最佳密钥对其进行加密。如果用户使用密码进入您的站点,则根据每个用户的明文密码(例如使用 PBKDF2)生成一个 AES 密钥,并使用他们的 AES 密钥加密每个用户的 OAuth 令牌。

如果不存在其他选项,则仅将站点密钥用作最后的手段,并根据@tylerl 对在哪里存储加密密钥的回答尽力保护站点密钥?. 但正如@tylerl 所写,“没有一个好的答案”。

所以,再一次,如果可能的话,不要存储 OAuth 令牌!