Как защитить адаптер MobileFirst для внутреннего процесса?

У нас есть адаптер MobileFirst с тестом безопасности wl_unprotected, чтобы использовать его из внутреннего процесса.

Мы применили следующее решение для защиты вызова через обычный URL-адрес.

  • URL-адрес с ограниченным доступом для службы безопасности, который будет вызываться из внешнего клиентского приложения.

Есть ли лучшее решение, которое можно было бы применить для защиты этого адаптера?


person MichealSmith    schedule 25.02.2015    source источник


Ответы (1)


В блоге Центра разработчиков платформы IBM MobileFirst есть очень хорошая статья о том, как это сделать. Защита процедур адаптера для доступа к серверной части https://developer.ibm.com/mobilefirstplatform/2015/02/04/protect-adapter-backend/

Пожалуйста, перейдите к статье для получения более подробной информации, но вот краткое изложение статьи.

Вы можете использовать обычную HTTP-аутентификацию для защиты этого адаптера. Обновите файл authenticationConfig.xml с помощью securityTest, realm и loginModule, как показано ниже:

authenticationConfig.xml

  <securityTests>
    <!-- your other security tests -->
    <customSecurityTest name="BackendAccessSecurity">
     <test realm="BackendAccessRealm" isInternalUserID="true"/>
    </customSecurityTest>
  </securityTests>

  <realms>
    <!-- your other realms -->
    <realm name="BackendAccessRealm" loginModule="BackendAccessLogin">
      <className>com.worklight.core.auth.ext.BasicAuthenticator</className>
      <parameter name="basic-realm-name" value="Private"/>
    </realm>
  </realms>
  <loginModules>
    <!-- your other login modules -->
    <loginModule name="BackendAccessLogin">
      <className>com.sample.auth.ConfiguredIdentityLoginModule</className>
      <parameter name="username-property" value="backend.username"/>
      <parameter name="password-property" value="backend.password"/>
    </loginModule>
  </loginModules>

worklight.properties

##
# Backend access credentials
##
backend.username=user
backend.password=password

ConfiguredIdentityLoginModule.java

  @Override
  public void init(Map<String, String> options) throws MissingConfigurationOptionException {
    String usernameProperty = options.remove(USERNAME_PROPERTY_CONF);
    if (usernameProperty == null) throw new MissingConfigurationOptionException(USERNAME_PROPERTY_CONF);
    String passwordProperty = options.remove(PASSWORD_PROPERTY_CONF);
    if (passwordProperty == null) throw new MissingConfigurationOptionException(PASSWORD_PROPERTY_CONF);
    super.init(options);

    WorklightConfiguration conf = WorklightConfiguration.getInstance();
    configuredUsername = conf.getStringProperty(usernameProperty);
    configuredPassword = conf.getStringProperty(passwordProperty);

    if (configuredUsername == null || configuredUsername.length() == 0) {
      throw new IllegalStateException("ConfiguredIdentityLoginModule cannot resolve property " + usernameProperty + ". Please check project configuration properties.");
    }

    if (configuredPassword == null || configuredPassword.length() == 0) {
      throw new IllegalStateException("ConfiguredIdentityLoginModule cannot resolve property " + usernameProperty + ". Please check project configuration properties.");
    }

  }

  @Override
  public boolean login(Map<String, Object> authenticationData) {
    populateCache(authenticationData);
    return configuredUsername.equals(username) && configuredPassword.equals(password);
  }

Наконец, защитите свой адаптер с помощью файла BackendAccessSecurity.

person Yoel Nunez    schedule 25.02.2015