基于 oauth 的身份验证查询
Posted
技术标签:
【中文标题】基于 oauth 的身份验证查询【英文标题】:oauth based authentication query 【发布时间】: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 开始。 【参考方案1】:连接的两个随机值不会比单个随机值y
(其中length(y) = length(x) + length(z)
)提供更多的熵/随机性。
这样的系统只能通过安全的 HTTPs 使用,但即便如此:使用 6 个月的 cookie 也不是真正安全的方法。最好定期检查关联用户的帐户是否仍然存在于 Google,例如通过使用 Google 的刷新令牌。
利用 Google+ 登录的典型网络应用程序只会依赖 Google 来维护 SSO 会话状态,而不会覆盖其应用程序的状态。因此,应用程序将使用仅在浏览器会话期间有效的会话 cookie,并让用户再次通过 Google 登录以进行新会话,让 Google 来确定 SSO 会话是否仍然存在。
将 SSO 会话外包给 Google 避免了在应用程序中存储长期会话 cookie 的需要,并以增加显式登录次数为代价提高了整体安全性(对于连接到 Google+ 登录的其他应用程序无论如何都会发生这种情况)。
【讨论】:
以上是关于基于 oauth 的身份验证查询的主要内容,如果未能解决你的问题,请参考以下文章
如何有单独的身份验证源? (一个用于 Oauth2,一个用于基于表单的登录)
在基于 OAuth2 的身份验证中,状态参数可以防止啥样的 CSRF 攻击?
使用 oAuth 和基于表单的身份验证配置 Spring Security