【问题标题】:Spring SAML SSO with OKTA - InResponseTo when changing web app context带有 OKTA 的 Spring SAML SSO - 更改 Web 应用程序上下文时的 InResponseTo
【发布时间】:2020-03-31 06:12:33
【问题描述】:

OKTA SAML SSO 与 Spring Security 的集成遇到了很多麻烦。我们使用 Spring Security 的 saml-dsl 扩展来配置身份验证,并且在 HTTP 上一切正常,但是当我们尝试使用 HTTPS 时,身份验证仅在应用程序部署在根 (/) 上下文时才有效。当我们将上下文更改为其他任何内容时,它会停止工作并开始抛出 InResponseTo 字段错误,有时使用不同的配置会导致重定向循环。

这是我们正在使用的配置:

        http
                .csrf()
                .disable();
        http
                .sessionManagement().sessionFixation().none();
        http
                .logout()
                .logoutSuccessUrl("/");
        http
                .authorizeRequests()
                .antMatchers("/saml*").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(samlConfigurer())
                .serviceProvider()
                .keyStore()
                .storeFilePath(config.getKeystorePath())
                .password(config.getKeystorePassword())
                .keyname(config.getKeyAlias())
                .keyPassword(config.getKeystorePassword())
                .and()
                .protocol("https")
                .hostname(String.format("%s:%s", serverURL, config.getServerPort()))
                .basePath("/"+contextRoot)
                .and()
                .identityProvider()
                .metadataFilePath(config.getMetadataUrl());

我们也应该正确设置 OKTA(https://localhost:8443/ourappcontext/saml/SSO 用于测试,所有其他的东西也一样)

我们已经尝试了这里提出的大多数解决方案和 Spring 文档(空工厂、弹簧会话管理和会话固定等),但似乎没有任何效果。我们做错了什么吗?我们目前没有生成任何 SP 元数据,这可能是错误的,并且请求以某种方式重定向到错误的地方或其他什么?到目前为止真的很困惑,第一次使用 SAML,我不确定它是扩展、OKTA 配置还是 Spring 配置......

我们正在 Wildfly 上进行部署,您可以通过单独的 jboss-web.xml 在其中设置应用程序上下文,如果这很重要的话。

【问题讨论】:

    标签: spring security spring-security saml okta


    【解决方案1】:

    默认使用HttpSessionStorageFactory,这提供HttpSessionStorage SAML 消息存储。

    --> HTTP 会话 cookie 是服务器端 SAML 消息存储的浏览器端密钥。

    当 SAML 响应传递给 Spring Security SAML SP 时浏览器没有发送 HTTP 会话 cookie 时,它​​找不到相关的 SAML AuthNRequest 并且无法将 'InResponseTo' 值与匹配 AuthNRequest 的 'ID' 值进行比较.

    如果您不能确保 HTTP 会话 cookie 已交付,您可以实现自己的 SAMLMessageStorageFactorySAMLMessageStorage(就像我一样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-21
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多