[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文档中建议的大多数解决方案(空工厂,spring会话管理和会话修复等),但似乎没有任何效果。我们做错什么了吗?我们目前未生成任何SP元数据,可能是因为这有问题,并且请求已以某种方式重定向到错误的地方或其他东西了吗?到目前为止,真的很困惑,第一次使用SAML,我不确定是扩展名,OKTA配置还是Spring配置...
我们正在Wildfly上进行部署,如果需要的话,您可以通过单独的jboss-web.xml在其中设置应用程序上下文。
非常欢迎任何解决方案和想法!预先感谢。
默认情况下使用HttpSessionStorageFactory
,这提供了HttpSessionStorage
SAML消息存储。
-> HTTP会话cookie是服务器端SAML消息存储库的浏览器端密钥。
当SAML响应传递到Spring Security SAML SP时浏览器未发送HTTP会话cookie时,它找不到相关的SAML AuthNRequest,并且无法将'InResponseTo'值与匹配AuthNRequest的'ID'值进行比较。
[如果您不能确保传递了HTTP会话cookie,则可以实现自己的SAMLMessageStorageFactory
和SAMLMessageStorage
(就像我一样)。