- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个网络应用程序,它将使用 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/
我有一个 webapp,它使用 php 服务器和数据库服务器执行大量 ajax 请求。我还创建了一个 iPhone 应用程序和一个 Android 应用程序,直到现在它们一直作为离线应用程序工作。 现
OAuth 的访问 token /刷新 token 流对我来说似乎非常不安全。帮助我更好地理解它。 假设我正在与利用 OAuth 的 API 集成(如 this one )。我有我的访问 token
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: How is oauth 2 different from oauth 1 我知道这两个不向后兼容。但是,既然已经实
我已经看到关于此的其他问题( here 、 here 和 here ),但我对任何解决方案都不满意,所以我再次询问。我正在启动一个 Web 应用程序,它将利用来自多个提供商(Google、Facebo
我知道(在 OAuth 中使用授权代码“授权代码”时),访问 token 的生命周期应该很短,但刷新 token 的生命周期可能很长。 所以我决定为我的项目: 访问 token 生命周期:1 天 刷新
在没有浏览器的情况下,我们可以在手机上的应用程序中使用 OAuth 吗? 如果没有浏览器,用户是否仍然可以批准 token 请求(以便消费者可以继续从服务提供者那里获取 protected 资源)?
用非常简单的术语来说,有人可以解释一下 OAuth 2 和 OAuth 1 之间的区别吗? OAuth 1 现在已经过时了吗?我们应该实现 OAuth 2 吗?我没有看到很多 OAuth 2 的实现;
修改表单例份验证登录过程并不难,因此除了正常的表单例份验证之外,WebClient 对象对由使用 Thinktecture IdentityModel 设置的 Web Api DAL 提供的 api/
我想连接到 LinkedIn 并通过他们的 API 提取一些信息。 LinkedIn API 使用 OAuth 2.0。 我读过的所有关于 OAuth 的文档(无论是在 LinkedIn 的上下文中还
OAuth 与其他身份验证标准的支持范围有多广? 这可能是社区维基的东西,但我还是要问。 我需要投资一些与服务器身份验证相关的东西,而且那里似乎有一些不错的东西。 最佳答案 OAuth 主要用作授权机
我有几个问题... 雅虎和微软 api 是否支持 oAuth 2.0? 如果是,那么主要是什么 应该采取的安全措施 转移时受到照顾 oAuth 1.0 到 oAuth 2.0。 Google API
我已经用谷歌 oAuth 开发了一个应用程序,这工作正常。 我可以登录并访问我的网站。 我的问题是,当我从我的应用程序中注销(注销)时,我删除了所有 session ,但未删除经过身份验证的 cook
我在 Internet 上寻找一些关于此的信息,最后在 RFC 上找到了 Oauth 1.0 协议(protocol):https://www.rfc-editor.org/rfc/rfc5849 您
我正在尝试制作 Google OpenID/OAuth hybrid签到工作。问题是它是一个可安装的网络(所以没有固定域),我也试图让它在我的开发机器上工作 - 所以返回 URL 类似于 http:/
我想构建一个独立与任何身份提供者(如 ADFS、OpenAM、oracle 身份)一起工作的应用程序。我的目的是验证来自任何一个 IDP 的登录用户,这些 IDP 配置为实现我的 SSO。 我不确定
我正在深入研究 Spring OAuth,发现一些相互矛盾的信息。 具体来说,this tutorial声明 /oauth/token 端点在将刷新 token 授予客户端应用程序之前处理用户名和密码
如何通过自定义命令行工具支持三足式 OAuth 工作流? 我想允许我的 CLI 工具的用户上网、登录并在本地缓存 token ,类似于 heroku login。正在做。 最佳答案 你必须扔掉同意屏幕
什么是 oauth 域?是否有任何免费的 oauth 服务?我可以将它用于 StackApps registration 吗? ?我在谷歌上搜索了很多,但找不到答案。 最佳答案 这是redirect_
我需要将我的 Delicious 书签下载到非 Web 应用程序,而无需持续的用户交互。我正在使用 Delicious 的 V2 API(使用 oAuth),但问题是他们的访问 token 似乎在一小
我正在尝试为两台服务器设置一个 nginx 负载均衡器/代理,并在两台服务器上运行 OAuth 身份验证的应用程序。 当 nginx 在端口 80 上运行时,一切都运行良好,但是当我将它放在任何其他端
我是一名优秀的程序员,十分优秀!