为什么将会话创建策略设置为无状态会破坏我的 oauth2 应用程序

Why does setting sessioncreation policy to stateless break my oauth2 app

@Override
    protected void configure(HttpSecurity http) throws Exception {
        // TODO Auto-generated method stub
        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

为什么将 SessionCreationPolicy 设置为 STATELESS 会中断 oauth2 登录? 使用 Facebook 进行身份验证后,该应用程序将进入一个永无止境的循环,最终导致“本地主机将您重定向太多次”。

循环是这样的:

  1. 使用 facebook 进行身份验证并重定向到:
  2. Redirect-Uri - //login/oauth2/code/facebook?code=&state=
  3. 返回 facebook 授权-Uri - /oauth2/authorization/facebook
  4. 重复

这一切都发生在 SessionCreationPolicy 成为 STATELESS 的情况下。有人可以向我解释为什么会这样吗?

这是预期的行为。 OAuth2 客户端需要以某种方式存储令牌,以便在以后的请求中使用它们。通过使用无状态 session 创建策略,每次调用应用程序时,它都不会找到任何令牌(即它不知道你已经在上一个请求中验证了自己),因此它会再次触发身份验证流程。

另一方面,OAuth2 资源服务器可以是无状态的,因为它们不依赖任何 session 状态。从 OAuth2 客户端发送到 OAuth2 资源服务器的每个请求都会在 HTTP 请求 header 中提供一个访问令牌(这是可能的,因为客户端将令牌存储在 session 中)。