security - 如何为两条腿的 OAuth 提供者存储消费者 secret ?

标签 security oauth password-protection

我正在实现用于 API 身份验证的两条腿 OAuth 协议(protocol)的提供者端。我们将为消费者提供消费者 key 和 secret ,他们将使用它们来签署请求。 2-legged OAuth 由互操作性标准规定,因此是一项要求。

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

我考虑了以下选项:

将 secret 存储为纯文本

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

使用存储在其他地方的加密 key 应用可逆加密(例如 AES)

这将提供一些安全性,因为如果数据库被破坏,那么 secret 仍然是安全的。但是可逆加密需要一个加密 key ,并且 key 必须存储在服务器上。这意味着如果攻击者破坏了机器,则可以绕过加密。

有什么我没有想到的吗?

澄清 实际上,它使用 2-legged Oauth 作为单点登录系统。 “消费者”创建一个请求,其中包括消费者 key 、随机数和其他几个参数。然后通过使用消费者 secret 计算 HMAC-SHA1 对整个请求进行签名。当请求到达我们的提供商系统时,该过程会重复,如果签名匹配,则请求处理将继续。因此,我们也需要纯文本 key 来计算我们这边的 HMAC-SHA1 签名。不幸的是,这种机制是由我们需要遵守的行业标准协议(protocol)规定的。

最佳答案

看看this previous question .我不是该主题的专家,但我认为您缺少等式的一部分。除了使用者 key 和 secret 之外,您还将验证发送请求的应用程序(如果您使用的是 RSA-SHA1,则使用 x509 证书)。

关于security - 如何为两条腿的 OAuth 提供者存储消费者 secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702672/

相关文章:

php - CodeIgniter 中的密码散列和验证

c++ - 从 std::cin 读取密码

rest - 如何防止无限重试 - Apache Shiro RESTful 服务

php - 如何获取 php hash_pbkdf2 衰减值

推特 oAuth : Updating authenticated user's status

facebook - 将 Facebook session key 转换为访问 token

java - 加载小程序时的 Tomcat 安全警告

security - 为什么不存储原始密码?

node.js - 使用 Mocha 在 NodeJS 中进行 OAuth 流测试

java - 我正在尝试使用 zip4j jar 文件提取受密码保护的 ZIP 文件,但出现以下错误