首页 文章

单点登录失败的自定义索赔处理

提问于
浏览
25

我正在使用WSO2 Identity Server进行单点登录实现 .

在我的演示应用程序中,我试图从我自己的JDBC数据库中获取经过身份验证的用户的自定义声明属性 .

我跟着Pushpalanka这个blog .

这适用于Identity Server 5.0.0

但是,当我使用最新的更新 "WSO2-IS-5.0.0-SP01" 更新Identity Server时,自定义声明处理已停止工作 .

以下是错误堆栈:

[2015-04-22 19:09:43,411] ERROR - 声明处理失败! org.wso2.carbon.identity.application.authentication.framework.exception.FrameworkException:索引:0,大小:0,位于com.wso2的com.wso2.sample.claim.handler.CustomClaimHandler.handleLocalClaims(CustomClaimHandler.java:200) .sample.claim.handler.CustomClaimHandler.handleClaimMappings(CustomClaimHandler.java:66)在org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handleClaimMappings(DefaultStepBasedSequenceHandler.java:604)在有机.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handlePostAuthentication(DefaultStepBasedSequenceHandler.java:394)在org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl . DefaultStepBasedSequenceHandler.handle(DefaultStepBasedSequenceHandler.java:134)at org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationReques) tHandler.java:121)在org.wso2.carbon.identity.application.authentication的org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:94) . framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:54)在javax.servlet.http.HttpServlet.service(HttpServlet.java:755)在javax.servlet.http.HttpServlet.service(HttpServlet.java:848)在组织位于org.eclipse.equinox.http的org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)的.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37)位于org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)的.avlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128),位于javax.servlet.http.HttpServlet.service(HttpServlet) .java:848)org.apac的org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) he.catalina.core.ApplicationFilterChain.internalDoFilter在org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter(ApplicationFilterChain.java:305)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) . 的doFilter(CharacterSetFilter.java:61)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java :472)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)at org.wso2.carbon.tomcat . org.ws上的ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178)在org.wso2.carbon.tomcat的org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56)上的o2.carbon.tomcat.ext.valves.CarbonTomcatValve $ 1.invoke(CarbonTomcatValve.java:47)位于org.wso2.carbon.tomcat.ext.valves的org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141)的.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) .CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java) :52)atg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)at atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1653)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)在java.lang中在java.util.ArrayList.get在java.util.ArrayList.rangeCheck(ArrayList.java:635)0:.Thread.run(Thread.java:745)引起的:java.lang.IndexOutOfBoundsException:索引:0,大小(ArrayList.java:411)在org.wso2.carbon.claim.mgt.ClaimManagerHandler.validateClaims(ClaimManagerHandler.java:668)在org.wso2.carbon.claim.mgt.ClaimManagerHandler.getMappingsFromOtherDialectToCarbon(ClaimManagerHandler.java:529)在org.wso2.carbon.claim.mgt.ClaimManagerHandler.getMappingsMapFromOtherDialectToCarbon(ClaimManagerHandler.java:614)在com.wso2.sample.clai m.handler.CustomClaimHandler.handleLocalClaims(CustomClaimHandler.java:141) .

根据我对Identity Server源代码的研究,这个问题出现在 org.wso2.identity.application.authentication.framewotk component 的Authentication Framework中 .

问题可能在于验证声明,但我没有在源代码中找到任何名为validateClaims的方法 .

在博客文章中给出的源代码中,使用了 Authentication Framework version - 4.2.2 .

我尝试使用最新版本的 Authentication Framework - 4.2.3 .

但问题仍然存在于同一个组件中 .

我仍然在努力 . 我需要一些指导 .

如果我遗失了某些事情,或者你们中的任何人遇到同样的问题,请有人帮忙 .

谢谢 .

1 回答

  • 0

    即使在次要版本更新之间,我也常常看到自定义模块的问题即使是现在,我发现我们的自定义身份验证器可能在尚未发布的补丁后无效 . 你真的需要自定义索赔处理吗?

    我们扩展了声明方法,用于声明和需要返回给服务提供者的属性,默认框架实现将读取并用户/返回所请求的用户属性 . 对于大多数情况,它应该足够了 .

相关问题