基于 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

如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?

如何使用身份验证过滤器将标头设置为令牌请求 OAuth?

Spring oauth2令牌请求中未实际使用的基本身份验证过滤器和身份验证入口点