Hello,

The tutorial doesn't answer the question "how can I interface with a REST
API", there are many examples around custom JDBC stores but for REST calls
I couldn't find anything.
There are other examples about transforming WSO2 OSGi bundles into REST
APIs but this not what I'm looking for.
The idea is to inherit from AbstractUserStoreManager and override its
methods in order to communicate with a third party REST API to retrieve
user details and roles without having to mention a JDBC or LDAP store
properties in user-mgt.xml.

Is this feasible guys?



Regards,
Hanen

On Thu, Nov 3, 2016 at 9:53 AM, Hanen Ben Rhouma <[email protected]> wrote:

> Thanks Gayan,
>
> I followed the blog entry but now I'm receiving another kind of error
> related to domain name:
>
> [2016-11-03 09:50:15,556] ERROR {org.wso2.carbon.identity.
> user.store.configuration.UserStoreConfigAdminService} -   Error occurred
> during the transformation process of C:\Users\rhoumah\DOCUME~1\LMR\
> WSO2\WSO2IS~1.0\bin\..\repository\deployment\server\userstores\custom.xml
> org.wso2.carbon.identity.user.store.configuration.utils.IdentityUserStoreMgtException:
>  Error occurred during the transformation process of
> C:\Users\rhoumah\DOCUME~1\LMR\WSO2\WSO2IS~1.0\bin\..\
> repository\deployment\server\userstores\custom.xml
>         at org.wso2.carbon.identity.user.store.configuration.
> UserStoreConfigAdminService.writeUserMgtXMLFile(
> UserStoreConfigAdminService.java:831)
>         at org.wso2.carbon.identity.user.store.configuration.
> UserStoreConfigAdminService.addUserStore(UserStoreConfigAdminService.
> java:270)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at org.apache.axis2.rpc.receivers.RPCUtil.
> invokeServiceClass(RPCUtil.java:212)
>         at org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver.
> invokeBusinessLogic(RPCInOnlyMessageReceiver.java:66)
>         at org.apache.axis2.receivers.AbstractMessageReceiver.receive(
> AbstractMessageReceiver.java:110)
>         at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>         at org.apache.axis2.transport.local.LocalTransportReceiver.
> processMessage(LocalTransportReceiver.java:169)
>         at org.apache.axis2.transport.local.LocalTransportReceiver.
> processMessage(LocalTransportReceiver.java:82)
>         at org.wso2.carbon.core.transports.local.
> CarbonLocalTransportSender.finalizeSendWithToAddress(
> CarbonLocalTransportSender.java:45)
>         at org.apache.axis2.transport.local.LocalTransportSender.
> invoke(LocalTransportSender.java:77)
>         at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
>         at org.apache.axis2.description.OutInAxisOperationClient.send(
> OutInAxisOperation.java:430)
>         at org.apache.axis2.description.OutInAxisOperationClient.
> executeImpl(OutInAxisOperation.java:225)
>         at org.apache.axis2.client.OperationClient.execute(
> OperationClient.java:149)
>         at org.wso2.carbon.identity.user.store.configuration.stub.
> UserStoreConfigAdminServiceStub.addUserStore(
> UserStoreConfigAdminServiceStub.java:889)
>         at org.wso2.carbon.identity.user.store.configuration.ui.client.
> UserStoreConfigAdminServiceClient.addUserStore(
> UserStoreConfigAdminServiceClient.java:95)
>         at org.apache.jsp.userstore_005fconfig.userstore_
> 002dconfig_002dfinish_002dajaxprocessor_jsp._jspService(userstore_
> 002dconfig_002dfinish_002dajaxprocessor_jsp.java:198)
>         at org.apache.jasper.runtime.HttpJspBase.service(
> HttpJspBase.java:70)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
>         at org.apache.jasper.servlet.JspServletWrapper.service(
> JspServletWrapper.java:439)
>         at org.apache.jasper.servlet.JspServlet.serviceJspFile(
> JspServlet.java:395)
>         at org.apache.jasper.servlet.JspServlet.service(JspServlet.
> java:339)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
>         at org.wso2.carbon.ui.JspServlet.service(JspServlet.java:155)
>         at org.wso2.carbon.ui.TilesJspServlet.service(
> TilesJspServlet.java:80)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
>         at org.eclipse.equinox.http.helper.ContextPathServletAdaptor.
> service(ContextPathServletAdaptor.java:37)
>         at org.eclipse.equinox.http.servlet.internal.
> ServletRegistration.service(ServletRegistration.java:61)
>         at org.eclipse.equinox.http.servlet.internal.ProxyServlet.
> processAlias(ProxyServlet.java:128)
>         at org.eclipse.equinox.http.servlet.internal.ProxyServlet.
> service(ProxyServlet.java:68)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
>         at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.
> service(DelegationServlet.java:68)
>         at org.apache.catalina.core.ApplicationFilterChain.
> internalDoFilter(ApplicationFilterChain.java:303)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
>         at org.apache.tomcat.websocket.server.WsFilter.doFilter(
> WsFilter.java:52)
>         at org.apache.catalina.core.ApplicationFilterChain.
> internalDoFilter(ApplicationFilterChain.java:241)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
>         at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(
> HttpHeaderSecurityFilter.java:120)
>         at org.apache.catalina.core.ApplicationFilterChain.
> internalDoFilter(ApplicationFilterChain.java:241)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
>         at org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.
> doFilter(CharacterSetFilter.java:61)
>         at org.apache.catalina.core.ApplicationFilterChain.
> internalDoFilter(ApplicationFilterChain.java:241)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
>         at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(
> HttpHeaderSecurityFilter.java:120)
>         at org.apache.catalina.core.ApplicationFilterChain.
> internalDoFilter(ApplicationFilterChain.java:241)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:218)
>         at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:122)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
> AuthenticatorBase.java:505)
>         at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:169)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:103)
>         at org.wso2.carbon.tomcat.ext.valves.CompositeValve.
> continueInvocation(CompositeValve.java:99)
>         at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.
> invoke(CarbonTomcatValve.java:47)
>         at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(
> TenantLazyLoaderValve.java:57)
>         at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.
> invokeValves(TomcatValveContainer.java:47)
>         at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(
> CompositeValve.java:62)
>         at org.wso2.carbon.tomcat.ext.valves.
> CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValv
> e.java:159)
>         at org.apache.catalina.valves.AccessLogValve.invoke(
> AccessLogValve.java:956)
>         at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.
> invoke(CarbonContextCreatorValve.java:57)
>         at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:116)
>         at org.apache.catalina.connector.CoyoteAdapter.service(
> CoyoteAdapter.java:442)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(
> AbstractHttp11Processor.java:1082)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.
> process(AbstractProtocol.java:623)
>         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> doRun(NioEndpoint.java:1756)
>         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> run(NioEndpoint.java:1715)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
>         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> TaskThread.java:61)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: javax.xml.transform.TransformerException:
> java.io.FileNotFoundException: C:\Users\rhoumah\DOCUME%7E1\
> LMR\WSO2\WSO2IS%7E1.0\bin\..\repository\deployment\server\userstores\custom.xml
> (The system cannot find the path specified)
>         at org.apache.xalan.transformer.TransformerIdentityImpl.
> createResultContentHandler(TransformerIdentityImpl.java:297)
>         at org.apache.xalan.transformer.TransformerIdentityImpl.transform(
> TransformerIdentityImpl.java:330)
>         at org.wso2.carbon.identity.user.store.configuration.
> UserStoreConfigAdminService.writeUserMgtXMLFile(
> UserStoreConfigAdminService.java:825)
>
>
> How can I configure the domain in order for WSO2 IS to generate the
> required XML file?
>
>
> Regards,
>
>
> *Hanen Ben Rhouma*
> *Java Tech Lead*
>
> On Wed, Nov 2, 2016 at 7:14 PM, Gayan Gunawardana <[email protected]> wrote:
>
>>
>>
>> On Wed, Nov 2, 2016 at 8:53 PM, Hanen Ben Rhouma <[email protected]>
>> wrote:
>>
>>> Thanks for the reply Gayan,
>>>
>>> Actually I'm facing an issue while trying to deploy the custom user
>>> store jar file under WSO2 IS, though I put it in
>>> <PRODUCT_HOME>/repository/components/dropins and changed
>>> <PRODUCT_HOME>/repository/conf/user-mgt.xml according to the
>>> documentation I'm receiving a ClassNotFound error:
>>>
>>> [2016-11-02 16:16:03,660] ERROR 
>>> {org.wso2.carbon.user.core.common.DefaultRealm}
>>> -  com.wso2.custom.usermgt.CustomUserStoreManager cannot be found by
>>> org.wso2.carbon.user.core_4.4.9Type class java.lang.ClassNotFoundExcepti
>>> on
>>> org.wso2.carbon.user.core.UserStoreException:
>>> com.wso2.custom.usermgt.CustomUserStoreManager cannot be found by
>>> org.wso2.carbon.user.core_4.4.9Type class java.lang.ClassNotFoundExcepti
>>> on
>>>         at org.wso2.carbon.user.core.common.DefaultRealm.createObjectWi
>>> thOptions(DefaultRealm.java:401)
>>>         at org.wso2.carbon.user.core.common.DefaultRealm.initializeObje
>>> cts(DefaultRealm.java:222)
>>>         at org.wso2.carbon.user.core.common.DefaultRealm.init(DefaultRe
>>> alm.java:127)
>>>         at org.wso2.carbon.user.core.common.DefaultRealmService.initial
>>> izeRealm(DefaultRealmService.java:263)
>>>         at org.wso2.carbon.user.core.common.DefaultRealmService.<init>(
>>> DefaultRealmService.java:100)
>>>         at org.wso2.carbon.user.core.common.DefaultRealmService.<init>(
>>> DefaultRealmService.java:113)
>>>         at org.wso2.carbon.user.core.internal.Activator.startDeploy(Act
>>> ivator.java:68)
>>>         at org.wso2.carbon.user.core.internal.BundleCheckActivator.star
>>> t(BundleCheckActivator.java:61)
>>>         at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1
>>> .run(BundleContextImpl.java:711)
>>>         at java.security.AccessController.doPrivileged(Native Method)
>>>         at org.eclipse.osgi.framework.internal.core.BundleContextImpl.s
>>> tartActivator(BundleContextImpl.java:702)
>>>         at org.eclipse.osgi.framework.internal.core.BundleContextImpl.s
>>> tart(BundleContextImpl.java:683)
>>>         at org.eclipse.osgi.framework.internal.core.BundleHost.startWor
>>> ker(BundleHost.java:381)
>>>         at org.eclipse.osgi.framework.internal.core.AbstractBundle.resu
>>> me(AbstractBundle.java:390)
>>>         at org.eclipse.osgi.framework.internal.core.Framework.resumeBun
>>> dle(Framework.java:1176)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.r
>>> esumeBundles(StartLevelManager.java:559)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.r
>>> esumeBundles(StartLevelManager.java:544)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.i
>>> ncFWSL(StartLevelManager.java:457)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.d
>>> oSetStartLevel(StartLevelManager.java:243)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.d
>>> ispatchEvent(StartLevelManager.java:438)
>>>         at org.eclipse.osgi.framework.internal.core.StartLevelManager.d
>>> ispatchEvent(StartLevelManager.java:1)
>>>         at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEve
>>> nt(EventManager.java:230)
>>>         at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread
>>> .run(EventManager.java:340)
>>> Caused by: java.lang.ClassNotFoundException:
>>> com.wso2.custom.usermgt.CustomUserStoreManager cannot be found by
>>> org.wso2.carbon.user.core_4.4.9
>>>         at org.eclipse.osgi.internal.loader.BundleLoader.findClassInter
>>> nal(BundleLoader.java:501)
>>>         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund
>>> leLoader.java:421)
>>>         at org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund
>>> leLoader.java:412)
>>>         at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loa
>>> dClass(DefaultClassLoader.java:107)
>>>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>>>         at java.lang.Class.forName0(Native Method)
>>>         at java.lang.Class.forName(Class.java:264)
>>>         at org.wso2.carbon.user.core.common.DefaultRealm.createObjectWi
>>> thOptions(DefaultRealm.java:345)
>>>
>>>
>>> Is there a missing config step in order to load the new jar?
>>>
>> According to exception I guess com.wso2.custom.usermgt.CustomUserStoreManager
>> was not added to OSGI environment. You have to register
>> CustomUserStoreManager as an OSGI service.
>>
>>  CustomUserStoreManager customUserStoreManager = new 
>> CustomUserStoreManager();
>>  ctxt.getBundleContext().registerService(UserStoreManager.class.getName(), 
>> customUserStoreManager, props);
>>
>> Please try sample code provided in [1].
>>
>> [1]http://isurad.blogspot.com/2016/03/how-to-write-custom-us
>> er-store-manager.html
>>
>>
>>
>>>
>>>
>>>
>>> Regards,
>>>
>>>
>>> *Hanen Ben Rhouma*
>>> *Java Tech Lead*
>>>
>>> On Tue, Nov 1, 2016 at 2:10 AM, Gayan Gunawardana <[email protected]>
>>> wrote:
>>>
>>>> Hi Hanen,
>>>>
>>>> On Mon, Oct 31, 2016 at 9:57 PM, Hanen Ben Rhouma <[email protected]>
>>>> wrote:
>>>>
>>>>> Thanks guys for your help but I guess I didn't explain it well;
>>>>> Actually, I'm looking for a step by step configuration that allows me to
>>>>> create an identity provider which jumps to our DB or any other inhouse
>>>>> endpoint (it can be a REST endpoint) in order to retrieve user details and
>>>>> aggregate them within the SAML token. Is there a way to do it through WSO2
>>>>> IS?
>>>>>
>>>> You can write custom user store manager according to [1] and override 
>>>> doAuthenticate,
>>>> doGetUserClaimValue methods to jump into your DB or REST endpoint.
>>>> Once you have custom user store, you can configure a service provider
>>>> in WSO2 IS with SAML inbound protocol.
>>>>
>>>> [1] https://docs.wso2.com/display/IS520/Writing+a+Custom+User+St
>>>> ore+Manager
>>>>
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Hanen
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Oct 28, 2016 at 8:07 PM, Gayan Gunawardana <[email protected]>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Oct 28, 2016 at 2:54 PM, Lakshani Gamage <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Hanen,
>>>>>>>
>>>>>>> This article [1] contains how to communicate Identity server with
>>>>>>> REST APIs. It will be a help to your POC.
>>>>>>>
>>>>>>> [1] http://wso2.com/library/articles/2016/10/article-exposing-ws
>>>>>>> o2-identity-server-admin-services-the-rest-way/
>>>>>>>
>>>>>>> Regards,
>>>>>>> Lakshani
>>>>>>>
>>>>>>> On Fri, Oct 28, 2016 at 1:22 PM, Ben Rhouma, Hanen (FircoSoft) <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> We’re working on a POC related to Authentication and Identity
>>>>>>>> Management using WSO2. We’re looking for a way to configure the 
>>>>>>>> Identity
>>>>>>>> Provider to communicate with a REST API or even a database in order to
>>>>>>>> retrieve more details about the user trying to authenticate so that 
>>>>>>>> those
>>>>>>>> details can be used to generate the token.
>>>>>>>>
>>>>>>> What sort of token you expect to generate ?
>>>>>> If you are looking for REST way to get authenticated user information
>>>>>> OIDC might help[1]. If you can explain exact use case we can help you 
>>>>>> more.
>>>>>>
>>>>>> [1]https://docs.wso2.com/display/IS520/OpenID+Connect
>>>>>>
>>>>>>> Is there a tutorial or a documentation part which can point us
>>>>>>>> directly to such use case implementation?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Hanen
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Dev mailing list
>>>>>>>> [email protected]
>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Lakshani Gamage
>>>>>>>
>>>>>>> *Software Engineer, WSO2*
>>>>>>>
>>>>>>> *Mobile : +94 71 5478184 <%2B94%20%280%29%20773%20451194>*
>>>>>>> *Blog : http://lakshanigamage.blogspot.com/
>>>>>>> <http://lakshanigamage.blogspot.com/>*
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Gayan Gunawardana
>>>>>> Software Engineer; WSO2 Inc.; http://wso2.com/
>>>>>> Email: [email protected]
>>>>>> Mobile: +94 (71) 8020933
>>>>>>
>>>>>> _______________________________________________
>>>>>> Dev mailing list
>>>>>> [email protected]
>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Gayan Gunawardana
>>>> Software Engineer; WSO2 Inc.; http://wso2.com/
>>>> Email: [email protected]
>>>> Mobile: +94 (71) 8020933
>>>>
>>>
>>>
>>
>>
>> --
>> Gayan Gunawardana
>> Software Engineer; WSO2 Inc.; http://wso2.com/
>> Email: [email protected]
>> Mobile: +94 (71) 8020933
>>
>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to