From 6cdd122c97e4a108d1f5ec3427a547861114e7d7 Mon Sep 17 00:00:00 2001 From: prabathabey Date: Thu, 28 May 2015 14:53:52 +0530 Subject: [PATCH] Adding the initial implementation of dynamic client registration --- .../dynamic-client-manager/pom.xml | 37 ++- .../oauth/extension/ApplicationConstants.java | 50 ++++ .../oauth/extension/OAuthApplicationInfo.java | 104 ++++++++ .../oauth/extension/RegistrationProfile.java | 134 ++++++++++ .../oauth/extension/RegistrationResponse.java | 41 +++ .../oauth/extension/RegistrationService.java | 4 +- .../impl/ClientRegistrationServiceImpl.java | 235 ++++++++++++++++++ .../webapp/META-INF/webapp-classloading.xml | 2 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 120 +-------- .../src/main/webapp/WEB-INF/web.xml | 28 +-- pom.xml | 23 ++ 11 files changed, 636 insertions(+), 142 deletions(-) create mode 100644 components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/ApplicationConstants.java create mode 100644 components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/OAuthApplicationInfo.java create mode 100644 components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationProfile.java create mode 100644 components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationResponse.java create mode 100644 components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/impl/ClientRegistrationServiceImpl.java diff --git a/components/oauth-extensions/dynamic-client-manager/pom.xml b/components/oauth-extensions/dynamic-client-manager/pom.xml index a04aa0ecea..b00035fa32 100644 --- a/components/oauth-extensions/dynamic-client-manager/pom.xml +++ b/components/oauth-extensions/dynamic-client-manager/pom.xml @@ -118,8 +118,41 @@ org.wso2.carbon.device.mgt.core provided - + + org.wso2.carbon + org.wso2.carbon.utils + provided + + + org.wso2.carbon.identity + org.wso2.carbon.identity.application.mgt + provided + + + org.wso2.carbon.apimgt + org.wso2.carbon.apimgt.api + provided + + + org.wso2.carbon.apimgt + org.wso2.carbon.apimgt.impl + provided + + + org.wso2.carbon.apimgt + org.wso2.carbon.apimgt.keymgt.client + provided + + + org.wso2.carbon.identity + org.wso2.carbon.identity.oauth + provided + + + com.googlecode.json-simple.wso2 + json-simple + provided + - diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/ApplicationConstants.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/ApplicationConstants.java new file mode 100644 index 0000000000..f01ad38814 --- /dev/null +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/ApplicationConstants.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.wso2.carbon.identity.oauth.extension; + +public class ApplicationConstants { + + public static final String OAUTH_CLIENT_ID = "client_id"; //this means consumer key + public static final String OAUTH_CLIENT_SECRET = "client_secret"; + public static final String OAUTH_REDIRECT_URIS = "redirect_uris"; + public static final String OAUTH_CALLBACK_URIS = "callback_url"; + public static final String OAUTH_CLIENT_NAME = "client_name"; + public static final String OAUTH_CLIENT_TYPE = "client_type"; + public static final String APP_KEY_TYPE = "key_type"; + public static final String APP_CALLBACK_URL = "callback_url"; + public static final String APP_HOME_PAGE = "homepage"; + public static final String OAUTH_CLIENT_CONTACT = "contact"; + public static final String APP_LOGOURI = "logouri"; + public static final String OAUTH_CLIENT_SCOPE = "scope"; + public static final String OAUTH_CLIENT_GRANT = "grant_types"; + public static final String OAUTH_CLIENT_RESPONSETYPE = "response_types"; + public static final String OAUTH_CLIENT_AUTHMETHOD = "token_endpoint_auth_method"; + public static final String OAUTH_CLIENT_REGISTRATION_CLIENT_URI = "registration_client_uri"; + public static final String OAUTH_CLIENT_REGISTRATION_ACCESSTOKEN = "registration_access_token"; + public static final String OAUTH_CLIENT_CONTACTS = "contacts"; + public static final String OAUTH_CLIENT_MANUAL = "MANUAL"; + public static final String OAUTH_CLIENT_PRODUCTION = "PRODUCTION"; + public static final String OAUTH_CLIENT_SANDBOX = "SANDBOX"; + public static final String OAUTH_CLIENT_NOACCESSTOKEN = "NO ACCESS TOKEN"; + public static final String OAUTH_CLIENT_JSONPARAMSTRING = "jsonParams"; + public static final String OAUTH_CLIENT_USERNAME = "username"; + public static final String OAUTH_CLIENT_APPLICATION = "application"; + public static final String VALIDITY_PERIOD = "validityPeriod"; + +} diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/OAuthApplicationInfo.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/OAuthApplicationInfo.java new file mode 100644 index 0000000000..e994bad555 --- /dev/null +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/OAuthApplicationInfo.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.wso2.carbon.identity.oauth.extension; + +import org.json.simple.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +public class OAuthApplicationInfo { + + + private String clientId; + private String clientName; + private String callBackURL; + private String clientSecret; + private Map parameters = new HashMap(); + + /** + * get client Id (consumer id) + * @return clientId + */ + public String getClientId() { + return clientId; + } + /** + * set client Id + * @param clientId + */ + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + /** + * Set client Name of OAuthApplication. + * @param clientName + */ + public void setClientName(String clientName){ + this.clientName = clientName; + } + + /** + * Set callback URL of OAuthapplication. + * @param callBackURL + */ + public void setCallBackURL(String callBackURL){ + this.callBackURL = callBackURL; + } + + public void addParameter(String name,Object value){ + parameters.put(name,value); + } + + public Object getParameter(String name){ + return parameters.get(name); + } + + public String getJsonString(){ + + return JSONObject.toJSONString(parameters); + + } + + public String getClientName(){ + return clientName; + } + + public String getCallBackURL(){ + return callBackURL; + } + + public void putAll(Map parameters){ + this.parameters.putAll(parameters); + } + + public void removeParameter(String key){ + this.parameters.remove(key); + } + +} diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationProfile.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationProfile.java new file mode 100644 index 0000000000..eb2b653ed6 --- /dev/null +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationProfile.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.wso2.carbon.identity.oauth.extension; + +import javax.ws.rs.core.Request; + +public class RegistrationProfile { + + private String applicationType; + private String[] redirectUris; + private String clientName; + private String logoUri; + private String subjectType; + private String sectorIdentifierUri; + private String tokenEndpointAuthMethod; + private String jwksUri; + private String userInfoEncryptedResponseAlg; + private String userInfoEncryptedResponseEnc; + private String[] contacts; + private String[] requestUris; + + public String getApplicationType() { + return applicationType; + } + + public void setApplicationType(String applicationType) { + this.applicationType = applicationType; + } + + public String[] getRedirectUris() { + return redirectUris; + } + + public void setRedirectUris(String[] redirectUris) { + this.redirectUris = redirectUris; + } + + public String getClientName() { + return clientName; + } + + public void setClientName(String clientName) { + this.clientName = clientName; + } + + public String getLogoUri() { + return logoUri; + } + + public void setLogoUri(String logoUri) { + this.logoUri = logoUri; + } + + public String getSubjectType() { + return subjectType; + } + + public void setSubjectType(String subjectType) { + this.subjectType = subjectType; + } + + public String getSectorIdentifierUri() { + return sectorIdentifierUri; + } + + public void setSectorIdentifierUri(String sectorIdentifierUri) { + this.sectorIdentifierUri = sectorIdentifierUri; + } + + public String getTokenEndpointAuthMethod() { + return tokenEndpointAuthMethod; + } + + public void setTokenEndpointAuthMethod(String tokenEndpointAuthMethod) { + this.tokenEndpointAuthMethod = tokenEndpointAuthMethod; + } + + public String getJwksUri() { + return jwksUri; + } + + public void setJwksUri(String jwksUri) { + this.jwksUri = jwksUri; + } + + public String getUserInfoEncryptedResponseAlg() { + return userInfoEncryptedResponseAlg; + } + + public void setUserInfoEncryptedResponseAlg(String userInfoEncryptedResponseAlg) { + this.userInfoEncryptedResponseAlg = userInfoEncryptedResponseAlg; + } + + public String getUserInfoEncryptedResponseEnc() { + return userInfoEncryptedResponseEnc; + } + + public void setUserInfoEncryptedResponseEnc(String userInfoEncryptedResponseEnc) { + this.userInfoEncryptedResponseEnc = userInfoEncryptedResponseEnc; + } + + public String[] getContacts() { + return contacts; + } + + public void setContacts(String[] contacts) { + this.contacts = contacts; + } + + public String[] getRequestUris() { + return requestUris; + } + + public void setRequestUris(String[] requestUris) { + this.requestUris = requestUris; + } + +} diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationResponse.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationResponse.java new file mode 100644 index 0000000000..23d60a8f11 --- /dev/null +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationResponse.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.wso2.carbon.identity.oauth.extension; + +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; + +public class RegistrationResponse extends Response { + + @Override + public Object getEntity() { + return null; + } + + @Override + public int getStatus() { + return 0; + } + + @Override + public MultivaluedMap getMetadata() { + return null; + } + +} diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationService.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationService.java index 49795c9f8d..9f2a0edd71 100644 --- a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationService.java +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/RegistrationService.java @@ -23,16 +23,14 @@ import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -@Path("/connect") public interface RegistrationService { @POST @Path("/register") - Response register(Request request); + Response register(RegistrationProfile profile); } \ No newline at end of file diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/impl/ClientRegistrationServiceImpl.java b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/impl/ClientRegistrationServiceImpl.java new file mode 100644 index 0000000000..5b180823c8 --- /dev/null +++ b/components/oauth-extensions/dynamic-client-manager/src/main/java/org/wso2/carbon/identity/oauth/extension/impl/ClientRegistrationServiceImpl.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.wso2.carbon.identity.oauth.extension.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.json.simple.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.wso2.carbon.apimgt.api.APIManagementException; +import org.wso2.carbon.apimgt.impl.utils.APIUtil; +import org.wso2.carbon.apimgt.keymgt.client.SubscriberKeyMgtClient; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.identity.application.common.IdentityApplicationManagementException; +import org.wso2.carbon.identity.application.common.model.InboundAuthenticationConfig; +import org.wso2.carbon.identity.application.common.model.InboundAuthenticationRequestConfig; +import org.wso2.carbon.identity.application.common.model.Property; +import org.wso2.carbon.identity.application.common.model.ServiceProvider; +import org.wso2.carbon.identity.application.mgt.ApplicationManagementService; +import org.wso2.carbon.identity.base.IdentityException; +import org.wso2.carbon.identity.oauth.OAuthAdminService; +import org.wso2.carbon.identity.oauth.dto.OAuthConsumerAppDTO; +import org.wso2.carbon.identity.oauth.extension.*; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; +import org.wso2.carbon.utils.multitenancy.MultitenantUtils; + +import javax.ws.rs.core.Response; + +public class ClientRegistrationServiceImpl implements RegistrationService { + + private static final Log log = LogFactory.getLog(ClientRegistrationServiceImpl.class); + + @Override + public Response register(RegistrationProfile profile) { + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + OAuthApplicationInfo info = this.registerApplication(profile); + return Response.status(Response.Status.ACCEPTED).entity(info.getJsonString()).build(); + } catch (APIManagementException e) { + String msg = "Error occurred while registering client '" + profile.getClientName() + "'"; + log.error(msg, e); + return Response.serverError().entity(msg).build(); + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + } + + + private OAuthApplicationInfo registerApplication(RegistrationProfile profile) throws APIManagementException { + //OAuthApplications are created by calling to APIKeyMgtSubscriber Service + SubscriberKeyMgtClient keyMgtClient = APIUtil.getKeyManagementClient(); + OAuthApplicationInfo oAuthApplicationInfo = new OAuthApplicationInfo(); + + //Subscriber's name should be passed as a parameter, since it's under the subscriber the OAuth App is created. + String userId = (String) oAuthApplicationInfo.getParameter(ApplicationConstants.OAUTH_CLIENT_USERNAME); + String applicationName = profile.getClientName(); + + if (log.isDebugEnabled()) { + log.debug("Trying to create OAuth application :" + applicationName); + } + + String callBackURL = ""; + if (oAuthApplicationInfo.getParameter("callback_url") != null) { + JSONArray jsonArray = (JSONArray) oAuthApplicationInfo.getParameter("callback_url"); + for (Object callbackUrlObject : jsonArray) { + callBackURL = (String) callbackUrlObject; + } + } + + String tokenScope = (String) oAuthApplicationInfo.getParameter("tokenScope"); + String tokenScopes[] = new String[1]; + tokenScopes[0] = tokenScope; + + oAuthApplicationInfo.addParameter("tokenScope", tokenScopes); + OAuthApplicationInfo info; + try { + info = this.createOAuthApplication(userId, applicationName, callBackURL); + } catch (Exception e) { + throw new APIManagementException("Can not create OAuth application : " + applicationName, e); + } + + if (info == null || info.getJsonString() == null) { + throw new APIManagementException("OAuth app does not contain required data: '" + applicationName + "'"); + } + + oAuthApplicationInfo.setClientName(info.getClientName()); + oAuthApplicationInfo.setClientId(info.getClientId()); + oAuthApplicationInfo.setCallBackURL(info.getCallBackURL()); + oAuthApplicationInfo.setClientSecret(info.getClientSecret()); + + try { + JSONObject jsonObject = new JSONObject(info.getJsonString()); + if (jsonObject.has(ApplicationConstants.OAUTH_REDIRECT_URIS)) { + oAuthApplicationInfo.addParameter(ApplicationConstants.OAUTH_REDIRECT_URIS, jsonObject.get(ApplicationConstants.OAUTH_REDIRECT_URIS)); + } + + if (jsonObject.has(ApplicationConstants.OAUTH_CLIENT_NAME)) { + oAuthApplicationInfo.addParameter(ApplicationConstants. + OAUTH_CLIENT_NAME, jsonObject.get(ApplicationConstants.OAUTH_CLIENT_NAME)); + } + + if (jsonObject.has(ApplicationConstants.OAUTH_CLIENT_GRANT)) { + oAuthApplicationInfo.addParameter(ApplicationConstants. + OAUTH_CLIENT_GRANT, jsonObject.get(ApplicationConstants.OAUTH_CLIENT_GRANT)); + } + } catch (JSONException e) { + throw new APIManagementException("Can not retrieve information of the created OAuth application", e); + } + return oAuthApplicationInfo; + } + + public OAuthApplicationInfo createOAuthApplication( + String userId, String applicationName, String callbackUrl) throws APIManagementException, IdentityException { + + if (userId == null || userId.isEmpty()) { + return null; + } + + String tenantDomain = MultitenantUtils.getTenantDomain(userId); + String baseUser = CarbonContext.getThreadLocalCarbonContext().getUsername(); + String userName = MultitenantUtils.getTenantAwareUsername(userId); + + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true); + + // Acting as the provided user. When creating Service Provider/OAuth App, + // username is fetched from CarbonContext + PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(userName); + + try { + + // Append the username before Application name to make application name unique across two users. + applicationName = userName + "_" + applicationName; + + // Create the Service Provider + ServiceProvider serviceProvider = new ServiceProvider(); + serviceProvider.setApplicationName(applicationName); + serviceProvider.setDescription("Service Provider for application " + applicationName); + + ApplicationManagementService appMgtService = ApplicationManagementService.getInstance(); + appMgtService.createApplication(serviceProvider); + + ServiceProvider createdServiceProvider = appMgtService.getApplication(applicationName); + + if (createdServiceProvider == null) { + throw new APIManagementException("Couldn't create Service Provider Application " + applicationName); + } + + // Then Create OAuthApp + OAuthAdminService oAuthAdminService = new OAuthAdminService(); + + OAuthConsumerAppDTO oAuthConsumerAppDTO = new OAuthConsumerAppDTO(); + + oAuthConsumerAppDTO.setApplicationName(applicationName); + oAuthConsumerAppDTO.setCallbackUrl(callbackUrl); + log.debug("Creating OAuth App " + applicationName); + oAuthAdminService.registerOAuthApplicationData(oAuthConsumerAppDTO); + log.debug("Created OAuth App " + applicationName); + OAuthConsumerAppDTO createdApp = oAuthAdminService.getOAuthApplicationDataByAppName(oAuthConsumerAppDTO + .getApplicationName()); + log.debug("Retrieved Details for OAuth App " + createdApp.getApplicationName()); + + // Set the OAuthApp in InboundAuthenticationConfig + InboundAuthenticationConfig inboundAuthenticationConfig = new InboundAuthenticationConfig(); + InboundAuthenticationRequestConfig[] inboundAuthenticationRequestConfigs = new + InboundAuthenticationRequestConfig[1]; + InboundAuthenticationRequestConfig inboundAuthenticationRequestConfig = new + InboundAuthenticationRequestConfig(); + + inboundAuthenticationRequestConfig.setInboundAuthKey(createdApp.getOauthConsumerKey()); + inboundAuthenticationRequestConfig.setInboundAuthType("oauth2"); + if (createdApp.getOauthConsumerSecret() != null && !createdApp. + getOauthConsumerSecret().isEmpty()) { + Property property = new Property(); + property.setName("oauthConsumerSecret"); + property.setValue(createdApp.getOauthConsumerSecret()); + Property[] properties = {property}; + inboundAuthenticationRequestConfig.setProperties(properties); + } + + inboundAuthenticationRequestConfigs[0] = inboundAuthenticationRequestConfig; + inboundAuthenticationConfig.setInboundAuthenticationRequestConfigs(inboundAuthenticationRequestConfigs); + createdServiceProvider.setInboundAuthenticationConfig(inboundAuthenticationConfig); + + // Update the Service Provider app to add OAuthApp as an Inbound Authentication Config + appMgtService.updateApplication(createdServiceProvider); + + + OAuthApplicationInfo oAuthApplicationInfo = new OAuthApplicationInfo(); + oAuthApplicationInfo.setClientId(createdApp.getOauthConsumerKey()); + oAuthApplicationInfo.setCallBackURL(createdApp.getCallbackUrl()); + oAuthApplicationInfo.setClientSecret(createdApp.getOauthConsumerSecret()); + + oAuthApplicationInfo.addParameter(ApplicationConstants. + OAUTH_REDIRECT_URIS, createdApp.getCallbackUrl()); + oAuthApplicationInfo.addParameter(ApplicationConstants. + OAUTH_CLIENT_NAME, createdApp.getApplicationName()); + oAuthApplicationInfo.addParameter(ApplicationConstants. + OAUTH_CLIENT_GRANT, createdApp.getGrantTypes()); + + return oAuthApplicationInfo; + + } catch (IdentityApplicationManagementException e) { + APIUtil.handleException("Error occurred while creating ServiceProvider for app " + applicationName, e); + } catch (Exception e) { + APIUtil.handleException("Error occurred while creating OAuthApp " + applicationName, e); + } finally { + PrivilegedCarbonContext.endTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(baseUser); + } + return null; + } + +} diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/META-INF/webapp-classloading.xml b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/META-INF/webapp-classloading.xml index 0371f7c294..38ac535842 100644 --- a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/META-INF/webapp-classloading.xml +++ b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/META-INF/webapp-classloading.xml @@ -31,5 +31,5 @@ Tomcat environment is the default and every webapps gets it even if they didn't specify it. e.g. If a webapps requires CXF, they will get both Tomcat and CXF. --> - Carbon + CXF,Carbon diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/cxf-servlet.xml index dc68cd55e3..94aac35f68 100644 --- a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -19,130 +19,20 @@ + http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/web.xml b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/web.xml index 645e44dae5..a89397675a 100644 --- a/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/web.xml +++ b/components/oauth-extensions/dynamic-client-manager/src/main/webapp/WEB-INF/web.xml @@ -18,34 +18,20 @@ ~ * under the License. ~ */ --> - - CDM-Windows-API - - - contextConfigLocation - /WEB-INF/cxf-servlet.xml - - - - org.wso2.carbon.mdm.mobileservices.windows.common.util.ConfigInitializerContextListener - - - + + Admin-Webapp - JAX-WS/JAX-RS-windows Endpoint - JAX-WS/JAX-RS-windows Servlet - JAXServlet-windows + JAX-WS/JAX-RS Device Registration Agent Endpoint + JAX-WS/JAX-RS Servlet + CXFServlet org.apache.cxf.transport.servlet.CXFServlet 1 - JAXServlet-windows - /services/* + CXFServlet + /* 60 diff --git a/pom.xml b/pom.xml index cf2b6fc79f..98d51d2cd8 100644 --- a/pom.xml +++ b/pom.xml @@ -592,6 +592,11 @@ + + org.wso2.carbon.apimgt + org.wso2.carbon.apimgt.keymgt.client + ${carbon.api.mgt.version} + org.wso2.carbon.apimgt org.wso2.carbon.apimgt.impl @@ -877,6 +882,7 @@ ${cxf.version} + org.wso2.carbon.commons @@ -890,6 +896,22 @@ ${carbon.commons.version} + + + org.wso2.carbon.identity + org.wso2.carbon.identity.application.mgt + ${carbon.identity.version} + + + org.wso2.carbon.identity + org.wso2.carbon.identity.oauth + ${carbon.identity.version} + + + com.googlecode.json-simple.wso2 + json-simple + ${json-simple.version} + @@ -1150,6 +1172,7 @@ 2.6.1 2.5.11 + 1.1.wso2v1