我正在 Tomcat 中实现 Google 的 OpenID Connect (OAuth 2.0)。
第一步是
我这样做了,并认为我可以将其存储为 Tomcat HttpSession 对象“session”中的属性。
但是在 Google 重定向到我的重定向 URI(在同一 Tomcat 服务器上)之后,Tomcat 已为此 HTTP Get 创建了一个 new 会话对象。
我已查看但找不到此行为的解释。我原以为原始会话对象可以通过重定向 GET 访问。
流程是:
从我的 Tomcat 获取 login.jsp;在会话中存储防伪令牌此页面有一个通过 Google 登录的按钮
按下按钮
GET accounts.google.com 返回一个 302,其中包含我的 redirect.jsp 的位置
从我的Tomcat获取redirect.jsp;显示会话中的所有属性——没有属性
我期望防伪令牌位于会话对象中。
我正在考虑将防伪令牌存储在文件系统中,根据重定向时间检查创建日期,并根据原始请求检查重定向的 request.getRemoteAddr 作为使用会话的替代方法。
我相信问题可能在于您对 XSRF 令牌的理解。它们是一次性的;当 Web 应用程序收到您提交的表单数据时,它将验证令牌,然后将其丢弃。除了一次表单提交之外,它不会持续存在。如果您将其保留在会话中,恶意用户可能会尝试在另一个页面上激活该表单,从而破坏令牌的用途。