2016-04-28 3 views
1

Я разрабатываю клиент Java, который динамически создает поставщика услуг с входящей аутентификацией, установленной в OAuth в WSO2 Identity Server. Код выглядит следующим образомСоздание поставщика услуг на сервере идентификации WSO2 с помощью средства OAuth с использованием Java

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); 
    } 

} 

После того, как я запускаю этот код, поставщик услуг становится созданный на сервере WSO2 личности, которое я мог видеть в консоли управления. Конфигурация OAuth, которая была выполнена по отношению к поставщику услуг, не отображается, и она пуста с помощью только ссылки «configure». Если бы я правильно понял WSO2 IS, я должен был получить ключ потребителя и секрет потребителя в разделе Конфигурация входящей аутентификации -> Конфигурация OAuth/OpenID Connect.

Пожалуйста, помогите мне в том, что нужно сделать правильно?

ответ

3

Попробуйте изменить свой клиент, как показано ниже,

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); 
    } 
} 

Проблема createApplication не сохраняет, кроме названия и описания конфигурации. Вы должны вызвать updateApplication для сохранения других конфигураций приложений.

+0

Пробовал ваше решение .. Но все равно не получал потребительский ключ и потребительский секрет, как ожидалось. –

+0

Я отредактировал код клиента. протестировал это с IS 5.1.0 –

+0

Его работа отлично теперь. Большое вам спасибо за вашу своевременную помощь. Моя цель состояла в том, чтобы это произошло с 5.0.0. В любом случае я перейду к 5.1.0. –

Смежные вопросы