简体   繁体   中英

Creating service provider in WSO2 Identity Server with OAuth facility using Java

I am developing a Java client which creates the service provider dynamically with Inbound Authentication set to OAuth in WSO2 Identity Server. The code goes as follows

import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;

import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.transport.http.HttpTransportProperties;
import org.wso2.carbon.authenticator.proxy.AuthenticationAdminStub;
import org.wso2.carbon.um.ws.api.WSRealmBuilder;
import org.wso2.carbon.um.ws.api.stub.ClaimValue;
import org.wso2.carbon.user.core.UserRealm;
import org.wso2.carbon.user.core.UserStoreManager;
import org.wso2.carbon.identity.application.common.model.xsd.InboundAuthenticationConfig;
import org.wso2.carbon.identity.application.common.model.xsd.InboundAuthenticationRequestConfig;
import org.wso2.carbon.identity.application.common.model.xsd.ServiceProvider;
import org.wso2.carbon.identity.application.mgt.stub.IdentityApplicationManagementServiceStub;

import org.wso2.carbon.identity.oauth.stub.*;
import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO;

public class IdentityClient {


    private final static String SERVER_URL = "https://localhost:9443/services/";

    public static void main(String[] args) throws RemoteException, OAuthAdminServiceException {    

        String appName = "Sample_App_3";

        System.setProperty("javax.net.ssl.trustStore", "wso2carbon.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "wso2carbon");

        try {

            OAuthAdminServiceStub stub = new OAuthAdminServiceStub(null,
                    SERVER_URL + "OAuthAdminService");
            IdentityApplicationManagementServiceStub IAMStub = new IdentityApplicationManagementServiceStub(
                    null, SERVER_URL + "IdentityApplicationManagementService");
            ServiceClient client = stub._getServiceClient();
            ServiceClient IAMClient = IAMStub._getServiceClient();
            authenticate(client);

            OAuthConsumerAppDTO consumerApp = new OAuthConsumerAppDTO();
            consumerApp.setApplicationName(appName);
            consumerApp.setOAuthVersion("OAuth-2.0");
            consumerApp.setCallbackUrl("http://localhost:8080/playground2/oauth2client");
            consumerApp.setGrantTypes(
                    "authorization_code implicit password client_credentials refresh_token "
                            + "urn:ietf:params:oauth:grant-type:saml2-bearer iwa:ntlm");

            /* OAuthAdminProxy.registerOAuthApplicationData(consumerApp); */
            stub.registerOAuthApplicationData(consumerApp);
            System.out.println("Application created successfully");

            authenticate(IAMClient);

            InboundAuthenticationRequestConfig iaReqConfig = new InboundAuthenticationRequestConfig();
            iaReqConfig.setInboundAuthKey(stub.getOAuthApplicationDataByAppName(appName)
                    .getOauthConsumerKey());
            iaReqConfig.setInboundAuthType(stub.getOAuthApplicationDataByAppName(appName)
                    .getOauthConsumerSecret());


            InboundAuthenticationRequestConfig[] iaReqConfigList = { iaReqConfig };

            InboundAuthenticationConfig ib = new InboundAuthenticationConfig();

            ib.setInboundAuthenticationRequestConfigs(iaReqConfigList);

            ServiceProvider serviceProvider = new ServiceProvider();
            serviceProvider.setApplicationName(
                    stub.getOAuthApplicationDataByAppName(appName).getApplicationName());
            serviceProvider.setInboundAuthenticationConfig(ib);

            IAMStub.createApplication(serviceProvider);

            System.out.println("Service Provider created");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void authenticate(ServiceClient client) {
        Options option = client.getOptions();
        HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
        auth.setUsername("admin");
        auth.setPassword("admin");
        auth.setPreemptiveAuthentication(true);
        option.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
        option.setManageSession(true);
    }

}

Once I run this code, the service provider is getting created in the WSO2 Identity Server which I could see in the management console. The OAuth configuration which has been done vis-a-vis the service provider is not showing up and it is empty with just a 'configure' link. Had I understood WSO2 IS properly then I should be getting the consumer key and consumer secret under Inbound Authentication Configuration --> OAuth/OpenID Connect Configuration drop down.

Please help me in what should be done right ?

Try changing your client as bellow,

import java.rmi.RemoteException;

import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HttpTransportProperties;
import org.wso2.carbon.identity.application.common.model.xsd.InboundAuthenticationConfig;
import org.wso2.carbon.identity.application.common.model.xsd.InboundAuthenticationRequestConfig;
import org.wso2.carbon.identity.application.common.model.xsd.Property;
import org.wso2.carbon.identity.application.common.model.xsd.ServiceProvider;
import org.wso2.carbon.identity.application.mgt.stub.IdentityApplicationManagementServiceStub;

import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceException;
import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceStub;
import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO;

public class IdentityClient {
    private final static String SERVER_URL = "https://localhost:9443/services/";

    public static void main(String[] args) throws RemoteException, OAuthAdminServiceException {

        String appName = "Sample_App_5";
        String appDescription = "Test description";

        System.setProperty("javax.net.ssl.trustStore", "wso2carbon.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "wso2carbon");

        try {

            OAuthAdminServiceStub stub = new OAuthAdminServiceStub(null,
                    SERVER_URL + "OAuthAdminService");
            IdentityApplicationManagementServiceStub IAMStub = new IdentityApplicationManagementServiceStub(
                    null, SERVER_URL + "IdentityApplicationManagementService");
            ServiceClient client = stub._getServiceClient();
            ServiceClient IAMClient = IAMStub._getServiceClient();
            authenticate(client);

            authenticate(IAMClient);
            ServiceProvider serviceProvider = new ServiceProvider();
            serviceProvider.setApplicationName(appName);
            serviceProvider.setDescription(appDescription);
            IAMStub.createApplication(serviceProvider);

            OAuthConsumerAppDTO consumerApp = new OAuthConsumerAppDTO();
            consumerApp.setApplicationName(appName);
            consumerApp.setOAuthVersion("OAuth-2.0");
            consumerApp.setCallbackUrl("http://localhost:8080/playground2/oauth2client");
            consumerApp.setGrantTypes(
                    "authorization_code implicit password client_credentials refresh_token "
                            + "urn:ietf:params:oauth:grant-type:saml2-bearer iwa:ntlm");

            /* OAuthAdminProxy.registerOAuthApplicationData(consumerApp); */
            stub.registerOAuthApplicationData(consumerApp);
            System.out.println("Application created successfully");
            System.out.println(stub.getOAuthApplicationDataByAppName(appName).getOauthConsumerKey());

            authenticate(IAMClient);

            InboundAuthenticationRequestConfig iaReqConfig = new InboundAuthenticationRequestConfig();
            iaReqConfig.setInboundAuthKey(stub.getOAuthApplicationDataByAppName(appName).getOauthConsumerKey());
            iaReqConfig.setInboundAuthType("oauth2");

            Property property = new Property();
            property.setName("oauthConsumerSecret");
            property.setValue(stub.getOAuthApplicationDataByAppName(appName).getOauthConsumerSecret());
            Property[] properties = { property };
            iaReqConfig.setProperties(properties);

            InboundAuthenticationRequestConfig[] iaReqConfigList = { iaReqConfig };

            InboundAuthenticationConfig ib = new InboundAuthenticationConfig();

            ib.setInboundAuthenticationRequestConfigs(iaReqConfigList);

            serviceProvider = IAMStub.getApplication(appName);
            serviceProvider.setApplicationName(
                    stub.getOAuthApplicationDataByAppName(appName).getApplicationName());
            serviceProvider.setInboundAuthenticationConfig(ib);

            IAMStub.updateApplication(serviceProvider);

            System.out.println("Service Provider created");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void authenticate(ServiceClient client) {
        Options option = client.getOptions();
        HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
        auth.setUsername("admin");
        auth.setPassword("admin");
        auth.setPreemptiveAuthentication(true);
        option.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
        option.setManageSession(true);
    }
}

Problem is createApplication does not save the configurations other than the name and the description. You have to call updateApplication to save other application configurations.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM