我刚刚遇到了一个类似于 pac4j 在 OIDC 回调和 Keycloak 提供程序之后使用 OIDC 身份验证(Azure)引发“状态无法确定”的问题,升级到我们的 web 应用程序版本后强制由 Tomcat 设置 Samesite 属性CookieProcessor 使用以下 context.xml 文件:
<Context>
<Manager pathname="" />
<CookieProcessor sameSiteCookies="strict"/>
</Context>
此设置是作为渗透测试的结果引入的。
网络跟踪显示,在重定向到 IdP 的 302 响应中设置的 JESSIONID cookie 在身份验证后不会被浏览器在对回调 URL 的请求中使用。因此无法确定状态,引发 TechnicalException。
不过,设置 samesite="lax" 似乎有效。所以这可能是一个(最好的?)解决方案。
也可能是在 OidcClient 上使用 setWithState(false) 的选项,但该选项无法通过基于属性的配置使用,因为它适用于 oauth2!?是否计划在未来版本中包含 oidc.withState 配置参数?
我正在使用基于 Java-11 的 pac4j 版本 (5.7.2)。
你的分析是对的。我已经更新了 5.7.x 和 master 分支。您可以使用 5.7.5-SNAPSHOT JAR 再次测试吗?谢谢