我创建了一个示例 SOAP Web 服务项目(spring boot)并尝试将 Okta 集成为资源服务器以进行身份验证。
我能够将应用程序部署到 WebLogic,但是当使用 SOAP UI 测试服务时,即使标头中没有包含令牌,它也会给出响应。
当我使用 wsdl url http://myhost:port/appservice/app.wsdl 从浏览器访问 WSDL 时,我看到 401 错误,因此我认为它正在获取安全配置更改。但它不适用于 SOAP 请求,即使没有 Okta 令牌我也会得到响应。
是否因为对于 SOAP 请求,我是否需要在安全配置 java 文件顶部包含任何拦截器?或者我是否采用了错误的 SOAP 安全路径?有人可以让我知道我错过了什么或指出我正确的方向吗?令牌验证是 WS-Security 的一部分吗?或者 Okta 资源服务器中的身份验证管理器足以满足此目的吗?
我跟着这个文档 https://spring.io/guides/gs/producing-web-service/#scratch创建它。
我已经阅读了与此和 spring 文档相关的大部分 SO 问题,但无法连接缺失的点。请在这件事上给予我帮助。花了很多时间后,我感觉自己在兜圈子。
UPDATE:我通过执行以下操作启用了 spring security 调试日志
- @EnableWebSecurity(调试=true)
- logging.level.org.springframework.security.web.FilterChainProxy=调试
UPDATE2:我没有对我的配置进行任何大的更改,但是当我在本地嵌入式 tomcat 上运行该项目时,它开始工作。为了在 Tomcat 上运行,我将打包从 war 更改为 jar,在我的 POM 和 Main 类中排除了 Tomcat,我必须删除 SpringBootServletInitializer 和 WebApplicationInitializer。就是这样。我使用 Okta 不记名令牌测试了 SOAP UI,它给了我响应。没有令牌,它没有给我回应。
Spring Security 仅在 WebLogic12c 中不起作用。我不知道我缺少什么才能在 WebLogic 中工作。当通过 Tomcat 部署时,请求会通过安全过滤器链中的所有 bean 传递 {
WebAsyncManager集成过滤器,
安全上下文持久性过滤器,
标头写入器过滤器,
Csrf过滤器,
注销过滤器,
BearerTokenAuthenticationFilter,
请求缓存感知过滤器,
SecurityContextHolderAwareRequestFilter,
匿名身份验证过滤器,
会话管理过滤器,
异常翻译过滤器,
过滤器安全拦截器}
但在 WebLogic 上,请求仅通过安全过滤器链 {WebAsyncManagerIntegrationFilter,
安全上下文持久性过滤器,
标头写入器过滤器,
Csrf过滤器}