【问题标题】:oauth based authentication query基于 oauth 的身份验证查询
【发布时间】:2015-12-09 15:21:43
【问题描述】:

我有一个使用 http 托管的现有 Web 应用程序。
对于某些部分,我会强制用户使用 Google (OAuth) 登录并收集他们的电子邮件 ID。
然后我将 cookie 设置为 6 个月,并将其内容设置为由两个变量组成的编码字符串 - x & z

String x = new BigInteger(130, random).toString(32);
String z = new BigInteger(130, random).toString(32);
String cookieValue = URLEncoder.encode("z="+z+"&x="+x, "UTF-8");
Cookie cookie = new Cookie("someDomain",cookieValue);
cookie.setHttpOnly(true);   
cookie.setPath("/");
cookie.setMaxAge(6 Months);`  

这些相同的值 'x' 和 'z' 然后根据用户在数据库中的记录以及用户的每次访问存储 - 这些值在 cookie 和数据库中都会更改。

您是否发现这种方法存在任何安全问题?

【问题讨论】:

  • 使用 https 开始。

标签: security cookies oauth-2.0


【解决方案1】:

连接的两个随机值不会比单个随机值y(其中length(y) = length(x) + length(z))提供更多的熵/随机性。

这样的系统只能通过安全的 HTTPs 使用,但即便如此:使用 6 个月的 cookie 也不是真正安全的方法。最好定期检查关联用户的帐户是否仍然存在于 Google,例如通过使用 Google 的刷新令牌。

利用 Google+ 登录的典型网络应用程序只会依赖 Google 来维护 SSO 会话状态,而不会覆盖其应用程序的状态。因此,应用程序将使用仅在浏览器会话期间有效的会话 cookie,并让用户再次通过 Google 登录以进行新会话,让 Google 来确定 SSO 会话是否仍然存在。

将 SSO 会话外包给 Google 避免了在应用程序中存储长期会话 cookie 的需要,并以增加显式登录次数为代价提高了整体安全性(对于连接到 Google+ 登录的其他应用程序无论如何都会发生这种情况)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 2015-02-02
    • 2015-06-07
    • 2021-01-25
    • 2015-08-12
    • 2015-03-28
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多