gpt4 book ai didi

security - 将来自 DropBox 的 OAuth 凭据安全地存储在数据库中以备后用

转载 作者:行者123 更新时间:2023-12-04 06:03:13 25 4
gpt4 key购买 nike

我正在构建一个网络应用程序,它将使用 DropBox API 将数据保存到用户文件夹。该站点有 2 个部分:一个 ASP.NET MVC 前端和一个 Windows 服务。目前,我正计划将授权请求中的 oauth 字符串和用户 ID 转储到数据库,并在服务和网站调用中使用它,但我应该如何存储该信息?我应该加密还是不加密?如果是这样,有关如何操作的任何建议?例如,如果数据库是加密的,我如何存储加密 key ?

最佳答案

您想始终访问用户的保管箱帐户还是仅在他们登录到您的系统时才能访问?我假设前者,因为您想存储 o-auth token 。在这种情况下,请参阅下面的加密讨论,了解为什么不能真正加密它。但是,我建议您采用更安全的方法,并且仅在用户登录时或登录后不久访问投递箱(即不要存储持久身份验证 token )
安全的方法
当用户登录时,从保管箱中获取 oauth token ,使用它来执行他们想要的任何操作,并在必要时在注销后保留它以继续执行任务(后台同步或其他东西)。但是,一旦最后一个任务完成,请删除 token 。这意味着如果您的服务器受到威胁,只有登录用户或最近注销的用户才会暴露。这是一种缓解措施,但它是您能得到的最好的结果。
我相信您可以使用 o-auth 做到这一点,而无需每次都明确提示用户输入新 token 。如果没有,我知道您可以使用 opendID 来实现,尽管我可以看到投递箱不允许这样做。
最后,如果这些都不起作用,您可以使用 PBKDF2(类似 5000 次迭代)在从用户密码派生的 key 下存储持久加密的 o-auth key 。当他们登录时,您对其进行解密、使用,然后删除明文副本。这样做的缺点是 1) 密码重置需要一个新的 o-auth token ,因为您不再拥有他们的 key 2) 用户必须登录到您的站点本身并给您一个密码,以便您可以导出 key 。他们不能使用 openid。
加密
如果您想持续访问 oauth token ,您就无法真正进行有意义的加密。正如你所说,你会把 key 存放在哪里?对于 Web 服务,没有好的答案。对于最终用户系统,答案是从您不能存储的用户密码中导出 key (这就是 lastpass 所做的)。您不能这样做,因为即使最终(wepapp)用户未登录,您也希望能够访问数据。
好的,系统管理员的密码呢?好吧,因为服务器一直在运行,所以这是毫无值(value)的,因为妥协仍然会泄露 key 。更糟糕的是,重新启动会关闭您的应用程序,因为它需要系统管理员的密码来解密其数据,而当系统在凌晨 3 点崩溃时,这些密码不太可能是他们的密码。
他们制造 Hardware Security Modules存储 key 并使用它们执行加密操作,因此攻击者可以获得 key ,因为它永远不会离开 HSM。但是,攻击者可以只要求 TPM 解密 o-auth 字符串。你能做的最好的事情就是限制这个速率,这样一次攻击每小时只能得到 1000 个 token (显然这个速率需要比合法使用更大)。鉴于 HSM 很昂贵,并且由于您需要专用系统而使托管变得昂贵,因此这是不值得的。
在理想的世界中,您将使用 TPM持有 key 并让它仅在系统未受到损害的情况下才释放数据。不幸的是,TPM 目前仅支持验证是否加载了正确的程序(例如引导加载程序、内核、然后是用户程序)。如果该程序在加载后受到威胁,他们将不做任何事情,这就是这里的威胁向量。这可能会在 future 5 到 10 年内发生变化,但现在对您没有帮助。

关于security - 将来自 DropBox 的 OAuth 凭据安全地存储在数据库中以备后用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com