【问题标题】:Twitter OAuth token storage without user database?没有用户数据库的 Twitter OAuth 令牌存储?
【发布时间】:2011-08-19 02:30:57
【问题描述】:

我正在尝试拼凑一个我认为对人们有用的非常快速的混搭,我想利用 Twitter 通信。这是我第一次使用 OAuth,我选择了 Twitterizer 库来完成这项工作。

我的问题来自这样一个事实,即我不打算存储用户信息或让用户创建帐户(它更多的是一种快速实用程序)。鉴于此,一旦我获得了用户的 OAuth 访问令牌和密码,我必须找出一种安全的方式来存储它们(可能是在本地),而不会损害 OAuth 的安全原则。

这是我目前的想法:

  • 用户完成整个过程,直到我获得他们的访问密钥和秘密
  • 我将值加密并存储在 cookie 中以供以后检索

但是,有几个问题/疑虑:

  • 什么(如果有的话)阻止某人通过 cookie 冒充用户?
  • 在同一浏览器上处理潜在的多个用户的正确方法是什么?我最初的想法是我的应用程序上的“注销”按钮会杀死 cookie,但我不确定。

提前感谢您提供的任何帮助!

【问题讨论】:

  • 您打算如何检索您散列的访问密钥和秘密值?您的意思是加密它们并将它们加密存储在 cookie 中吗?
  • 是的,正确——谢谢!我会澄清的。
  • 虽然您提供了大量背景信息很好,但人们应该理解您提出的问题非常广泛:如何才能最好地将敏感信息存储在 cookie 中?这是个好主意吗?

标签: security asp.net-mvc-3 twitter oauth twitterizer


【解决方案1】:

我对 OAuth 了解不多,因为我不使用它,但是在一个浏览器上处理多个用户的一种方法是使用某种计时器功能。每次用户连接到您的页面时,cookie 都会获得一个“有效期至”时间戳,例如现在 + 30 分钟。如果超过有效期限,应用程序将要求用户重新进行身份验证。

您甚至可以通过在页面卸载时设置一个非常短的时间戳然后在页面加载时设置一个更长的时间来做到这一点。这意味着如果用户在您的应用程序中从一个页面转到另一个页面,他们将有很长的超时时间,但如果他们离开您的应用程序,下一个用户可以在一分钟左右使用相同的浏览器,而前一个用户没有登录.

更安全的方法是使用会话。例如,您可以设置一个包含会话 ID 的 cookie,然后在会话中设置“有效直到”值。

但是请注意,这些方法绝对不是傻瓜,因为 cookie 可以被操纵、时间戳改变和会话被劫持。

【讨论】:

  • 嗨 Lobo -- 感谢您的回复!然而,我认为目标是避免让用户每次使用我的应用程序时都必须重新授权我的应用程序代表他们发推文,因为这已成为一种非标准行为(因为大多数网站授权一次并存储在用户数据库)。我认为计时器对于我正在做的事情可能有点过头了,但我会更详细地检查会话选项,因为这更适合在公共环境中使用。也许重新授权一次会话不会那么糟糕..
【解决方案2】:

我认为总的来说,不应依赖 cookie 来获取敏感信息,但是,安全始终是一种平衡行为。归根结底,您是在试图掩盖您不安全地存储的信息。

除了加密令牌之外,您还可以包含校验和。我会把它放在一个单独的cookie中。它只需是您的站点可以用来验证敏感数据完整性的某个值,以确保它没有被篡改。它可以是单向加密哈希或类似的东西。

您还可以在 cookie 上指定过期日期。也许保持几天或几周。

我再说一遍,通常将敏感信息存储在 cookie 中是个坏主意。

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多