- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OAuth 1.0a 凭证需要以明文形式(或以明文形式检索的方式)存储在服务器上,至少在进行 2 腿身份验证时,我是否正确?假设您使用的是 HTTPS 或其他 TLS,这不是比使用用户名和加盐 + 哈希密码安全性低得多吗?有没有一种方法可以存储这些凭据,以便安全漏洞不需要撤销所有凭据?
<小时/>更详细地说:我正在实现一个 API,并希望使用 OAuth 1.0a 来保护它。 future 可能会有很多不同的 API 客户端,但到目前为止唯一一个不需要敏感的用户数据,所以我打算使用“两条腿”OAuth。
据我了解,这意味着我为每个 API 客户端生成一个消费者 key 和一个共享 key 。对于每个 API 请求,客户端都会提供使用者 key 以及使用共享 key 生成的签名。 secret 本身不是通过线路发送的,我绝对理解为什么这比直接发送用户名和密码更好。
但是,据我了解,消费者和提供者都必须显式存储消费者 key 和共享 secret (如果我错了,请纠正我),这似乎是一个重大的安全风险。如果攻击者破坏了包含消费者 key 和共享 secret 的提供商的数据存储,则每个 API 客户端都将受到损害,重新保护系统的唯一方法就是撤销每个 key 。这与密码相反,密码(理想情况下)永远不会以可逆的方式存储在服务器上。如果您对密码进行加盐和散列处理,那么攻击者将无法仅通过破坏您的数据库来侵入任何帐户。
我所做的所有研究似乎只是通过说“像处理任何敏感数据一样保护凭证”来掩盖这个问题,但这似乎很荒谬。违规行为确实会发生,虽然它们可能会暴露敏感数据,但它们不应该允许攻击者冒充用户,对吗?
最佳答案
你是对的。然而,oAuth 允许您代表用户登录,因此目标服务器(您从中访问数据的服务器)需要信任您提供的 token 。
当您是用户键入的 secret 的接收者时,密码哈希值是很好的选择(顺便说一句,这就是当 oAuth 向用户呈现登录/接受窗口以随后生成 token 时发生的情况) )。这就是“明文”部分发生的地方(用户以明文形式输入密码)。
您需要有一个等效的机制,以便服务器能够识别您; oAuth 提供的是提供密码以外的东西的能力 - 一种有限的授权形式,用于代表他登录。如果泄漏,那么您需要使其无效。
您可以以或多或少复杂的方式存储这些 secret ,最终您仍然需要向服务器提供“明文”版本(但是,该服务器可能会使用哈希来存储它以进行检查) ,因为它只需要验证您以纯文本形式呈现的内容(经过哈希处理后)是否与它们存储的哈希相对应)
关于security - OAuth 1.0a,2 足 : how do you securely store clients' credentials (keys/secrets)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299444/
查看“mysqldump -d”并看到一个键是 KEY,而不是“PRIMARY KEY”或“FOREIGN KEY” 什么是关键? 示例: CREATE TABLE IF NOT EXISTS `TA
在我开始使用 Python 的过程中尝试找出最佳编码实践。我用 Pandas 写了一个 csv 到数据框阅读器。它使用格式: dataframe = read_csv(csv_input, useco
在 Flutter 中,用一个例子可以清楚地解释什么? 我的困惑是关于 key,如下面的代码所示。 MyHomepage({Key key, this.title}) : super(key: key
我在我的 Android 应用程序中使用 GCM。要使用 GCM 服务,我们需要创建 Google API key 。因此,我为 android、服务器和浏览器 key 创建了 API key 。似乎
我想在 azure key 保管库中创建一个 secret ,该 key 将具有多个 key (例如 JSON)。 例如- { "storageAccountKey":"XXXXX", "Co
尝试通过带有 encodeforURL() 的 url 发送 key 时,我不断收到错误消息和 decodefromUrl() .代码示例如下。 这是我的入口页面: key = generateSec
是否有检查雪花变体字段中是否存在键的函数? 最佳答案 您可以使用 IS_NULL_VALUE 来查看 key 是否存在。如果键不存在,则结果将为 NULL。如果键存在,如果值为 JSON null,则
我正在尝试运行此命令: sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A 但我收到一个错误: Execu
我有一个 csv 文件,我正在尝试对 row[3] 进行计数,然后将其与 row[0] 连接 row[0] row[3] 'A01' 'a' 'B02'
如何编写具有这种形式的函数: A(key, B(key, C(key, ValFactory(key)))) 其中 A、B 和 C 具有此签名: TResult GetOrAdd(string key
审查 this method我很好奇为什么它使用 Object.keys(this).map(key => (this as any)[key])? 只调用 Object.keys(this).ind
我有一个奇怪的情况。我有一个字典,self.containing_dict。使用调试器,我看到了字典的内容,并且可以看到 self 是其中的一个键。但是看看这个: >>> self in self.c
我需要在我的 Google Apps 脚本中使用 RSA-SHA256 和公钥签署消息。 我正在尝试使用 Utilities.computeRsaSha256Signature(value, key)
我是 React 的初学者开发人员,几天前我看到了一些我不理解的有趣语法。 View组件上有{...{key}},我会写成 key={key} ,它完全一样吗?你有链接或解释吗? render()
代理 key 、合成 key 和人工 key 之间有什么区别吗? 我不清楚确切的区别。 最佳答案 代理键、合成键和人工键是同义词。技术关键是另一个。它们都表示“没有商业意义的主键”。它们不同于具有超出
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
我正在寻找 Perl 警告的解决方案 “引用键是实验性的” 我从这样的代码中得到这个: foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z 我在
我正在为 HSM 实现 JCE 提供程序 JCE中有没有机制指定 key 生成类型例如: session key 或永久 key KeyGenerator keygen = KeyGener
我在 Facebook 上创建了一个应用程序。我已经正确添加了 keyhash 并且应用程序运行良好但是当我今天来并尝试再次运行它时它给了我这个错误。 这已经是第二次了。 Previsouly 当我收
我是一名优秀的程序员,十分优秀!