我正在使用WSO2 Identity Server進行單點登錄實現。自定義聲明處理單點登錄失敗
在我的演示應用程序中,我試圖從我自己的JDBC數據庫中獲取已驗證用戶的自定義聲明屬性。
我跟着這個Pushpalanka的blog。
這工作得很好了在Identity Server 5.0.0
但是,當我更新的Identity Server與最新更新「WSO2-IS-5.0.0-SP01」,自定義理賠停止工作。
以下是錯誤堆棧:
[2015年4月22日19:09:43311] ERROR {org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl .DefaultStepBasedSequenceHandler} - 索賠處理失敗! org.wso2.carbon.identity.application.authentication.framework.exception.FrameworkException: Index:0,Size:0 at com.wso2.sample.claim.handler.CustomClaimHandler.handleLocalClaims(CustomClaimHandler.java:200) at com.wso2.sample.claim.handler.CustomClaimHandler.handleClaimMappings(CustomClaimHandler.java:66) 在 org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handleClaimMappings(DefaultStepBasedSequenceHandler。的java:604) 在 org.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(DefaultAuthenticationRequestHandler.java:121) 在 org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:94) 在 org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:54) at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)at javax.servlet。 http.HttpServle t.service(HttpServlet.java:848)at org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37) at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service (ServletRegistration.java:61) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.service (ProxyServlet.java:60) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter。的java:61) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 有機.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) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178) 在 org.wso2 .carbon.tomcat.ext.valves.CarbonTomcatValve $ 1.invoke(CarbonTomcatValve.java:47) 在 org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56) 在 org.wso2。 carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141) 在 org.wso2。 carbon.tomcat.ext.valves.CarbonStuckThreadDetectionVa lve.invoke(CarbonStuckThreadDetectionValve.java:156) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 在 org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke( CarbonContextCreatorValve.java:52) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at 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) at java.lang.Thread.run(Thread.java:745)導致: java.lang.IndexOutOfBoundsException:索引:0,大小:0 at java.util.ArrayList.rangeCheck(ArrayList.java:635)at java.util.ArrayList.get(ArrayList.java:411)at org.wso2.carbon.claim.mgt.ClaimManagerHandler.validateClaims(ClaimManagerHandler.java: 668) at org.wso2.carbon.claim.mgt.ClaimManagerHa ndler.getMappingsFromOtherDialectToCarbon(ClaimManagerHandler.java:529) 在 org.wso2.carbon.claim.mgt.ClaimManagerHandler.getMappingsMapFromOtherDialectToCarbon(ClaimManagerHandler.java:614) 在 com.wso2.sample.claim.handler.CustomClaimHandler.handleLocalClaims( CustomClaimHandler.java:141)。
根據我對Identity Server的源代碼的研究這個問題在認證框架在org.wso2.identity.application.authentication.framewotk組件。
問題可能出在驗證聲明上,但我沒有在源代碼中找到任何名爲validateClaims的方法。
在博客文章中給出的源代碼中,使用了認證框架版本 - 4.2.2。
我試過使用最新版本的認證框架 - 4.2.3。
但問題仍然在相同的組件。
我仍然在這方面付出努力。我需要一些指導。
如果我缺少一些東西或者您遇到同樣的問題,請有人幫忙。
謝謝。
是的 - 從額外的/額外的數據源讀取用戶屬性並不總是很簡單。我們創建了一個自定義用戶管理器,用主LDAP進行身份驗證,並從另一個源(AD)中讀取屬性,覆蓋getUserPropertyValues方法。 – gusto2
你說得對,用戶角色需要分開處理。但是 - 我們試圖保持簡單並在用戶商店層面上做到這一點(因爲也有一些限制).. – gusto2
是的,當我們從中獲得聲明的用戶存儲被配置時,這將是足夠的作爲身份服務器中的主要/次要服務器。 但是當我添加輔助用戶商店時還有一些其他問題。例如ActiveDirectory。 當我將ActiveDirectory添加爲輔助用戶存儲時,默認情況下,所有用戶都沒有獲取內部/所有人角色。所以我們必須手動去用戶並分配角色。這也適用於只有一個活動會話。 所以,最好是使用Custom聲明處理程序,而不是將用戶存儲與Identity Server作爲輔助用戶存儲。 –