如何为两条腿OAuth提供商存储消费者秘密?

Jon*_*han 5 security oauth password-protection

我正在实施用于API身份验证的两条腿OAuth协议的提供程序端.我们将向消费者提供消费者密钥和秘密,他们将使用这些密钥和密钥来签署请求.两条腿OAuth由互操作性标准决定,因此是一项要求.

秘密类似于密码,我通常不会将密码存储为纯文本(bCrypt或类似的将是我的正常选择).但是因为我的提供者需要访问纯文本秘密来验证签名,所以它必须是一些纯文本或可逆形式.

我考虑过以下选项:

将秘密存储为纯文本

这是最明显的解决方案,但如果数据库以某种方式受到损害,那么所有的秘密都必须改变.对我来说,这个解决方案并不理想,因为它具有以纯文本形式存储密码的所有问题.

使用存储在其他位置的加密密钥应用可逆加密(例如AES)

这将提供一些安全性,因为如果数据库被泄露,那么秘密仍然是安全的.但是可逆加密需要加密密钥,密钥必须存储在服务器上.这意味着如果攻击者破坏了计算机,则可以规避加密.

有什么我没有想到的吗?

澄清有效地,它使用2腿Oauth作为单点登录系统.'consumer'创建一个请求,包括使用者密钥,nonce和其他几个参数.然后通过计算具有消费者秘密的HMAC-SHA1来签署整个请求.当请求到达我们的提供者系统时,重复该过程,如果签名匹配,则继续请求处理.因此,我们需要明文秘密来计算我们方面的HMAC-SHA1签名.不幸的是,这种机制是由我们需要遵守的行业标准协议决定的.

Tex*_*Tex 2

看看上一个问题。我不是这个话题的专家,但我认为你遗漏了部分方程式。除了使用者密钥和机密之外,您还将验证发送请求的应用程序(如果您使用的是 RSA-SHA1,则使用 x509 证书)。