从spring-security-saml2-core 1.0.10迁移至5.8.15后SAML登录报错求助
Spring Security SAML2迁移后回调资源不可用问题排查
以下是针对该问题的排查方向和解决办法:
端口不一致导致回调失败
你访问测试地址用的是http://localhost:8080/test,但OKTA配置的单点登录URL和受众URI都是2080端口。IDP验证凭证后会重定向到2080端口的回调地址,而应用实际运行在8080,因此找不到对应资源。解决方式:统一端口,要么修改OKTA配置里的URL为8080端口,要么调整应用运行端口为2080。SAML2回调端点未正确注册
确认security.xml中是否正确配置了Saml2WebSsoAuthenticationFilter并加入过滤器链。Spring Security 5.x的SAML2需要该过滤器处理/login/saml2/sso/{registrationId}路径的回调请求,示例配置如下:<bean id="saml2WebSsoAuthenticationFilter" class="org.springframework.security.saml2.provider.service.web.authentication.Saml2WebSsoAuthenticationFilter"> <constructor-arg ref="authenticationManager"/> <constructor-arg ref="saml2AuthenticationTokenConverter"/> <property name="successHandler" ref="simpleUrlAuthenticationSuccessHandler"/> </bean> <!-- 将过滤器加入HTTP安全配置 --> <security:http> <!-- 其他配置 --> <security:saml2-login registration-id="okta"/> <security:custom-filter ref="saml2WebSsoAuthenticationFilter" before="FORM_LOGIN_FILTER"/> </security:http>依赖方注册ID不匹配
OKTA配置中回调路径的okta是依赖方注册ID,必须和security.xml里配置的RelyingPartyRegistration的ID一致。检查注册配置,确保ID为okta:<bean id="relyingPartyRegistrationRepository" class="org.springframework.security.saml2.provider.service.registration.InMemoryRelyingPartyRegistrationRepository"> <constructor-arg> <list> <bean class="org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration"> <constructor-arg value="okta"/> <!-- 这里的ID必须和回调路径的okta一致 --> <!-- 其他注册配置 --> </bean> </list> </constructor-arg> </bean>受众URI配置错误
OKTA里的受众URI需要和SP的实体ID一致,你可以访问http://localhost:8080/saml2/service-provider-metadata/okta获取元数据,确认其中的entityID值,将OKTA的受众URI修改为该值。
内容的提问来源于stack exchange,提问作者Nagarjuna
相关产品推荐
相关产品推荐

