0

Мы пытаемся разработать управление сеансом на сервере IBMWorklight. Ниже приведены наши потребности в системе управления сессиями.Управление сеансом IBMWorklight

  1. Сессия должна быть создана после того, как каждый пользователь будет использовать свои учетные данные (имя пользователя/пароль).
  2. Этот сеанс должен иметь возможность хранить данные сеанса этого конкретного пользователя, то есть сеанс должен сохранять его учетные данные, чтобы ему не пришлось передавать их снова для доступа к другим службам.
  3. Время ожидания сеанса должно происходить через определенное время.

Наш прогресс

  1. Создано область в authenticationConfig:

    <realm name="SimpleAuthRealm" loginModule="SimpleAuthLoginModule"> 
        <className>com.worklight.integration.auth.AdapterAuthenticator</className> 
        <parameter name="login-function" value="SimpleAuthAdapter.onAuthRequired" /> 
        <parameter name="logout-function" value="SimpleAuthAdapter.onLogout" /> 
    </realm> 
    
  2. Создан модуль Логин в authenticationConfig:

    <loginModule name="SimpleAuthLoginModule"> 
          <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className> 
         </loginModule> 
    
  3. Создан тест безопасности:

    <customSecurityTest name="SimpleAuthAdapterTest"> 
           <test realm="SimpleAuthRealm" isInternalUserID="true"/> 
          </customSecurityTest> 
    
  4. Мы создали адаптер с двумя процедурами в нем. Ниже adapter.xml файлу

    <procedure name="requestForData" securityTest="SimpleAuthAdapterTest" /> 
    <procedure name="requestForOtherData" securityTest="SimpleAuthAdapterTest" /> 
    
  5. Ниже приведен адаптер файл реализации:

    function onAuthRequired(headers, errorMessage) { 
        WL.Logger.info("onAuthRequired(headers, errorMessage)----> START"); 
        WL.Logger.info("headers: " + JSON.stringify(headers)); 
        WL.Logger.info("errorMessage: " + errorMessage); 
    
        errorMessage = errorMessage ? errorMessage : null; 
    
        WL.Logger.info("onAuthRequired(headers, errorMessage)----> STOP"); 
        return { 
         authRequired : true, 
         errorMessage : errorMessage 
        }; 
    } 
    
    function submitAuthentication(username, password) { 
    
        WL.Logger.info("submitAuthentication(username, password)----> START"); 
        WL.Logger.info("username: " + username); 
        WL.Logger.info("password: " + password); 
    
        if (username === "worklight" && password === "worklight") { 
    
         WL.Logger.info("Login successfull"); 
    
         var userIdentity = { 
          userId : username, 
          displayName : username, 
    
         }; 
    
         WL.Server.setActiveUser("SimpleAuthRealm", userIdentity); 
    
         var response = { 
          authRequired : false, 
          errorMessage : "" 
         }; 
    
         WL.Logger.info("submitAuthentication(username, password)----> STOP"); 
         WL.Logger.info("response: " + JSON.stringify(response)); 
    
         return response; 
        } 
    
        var response = { 
         authRequired : true, 
         errorMessage : "Invalid login credentials" 
        }; 
    
        WL.Logger.info("submitAuthentication(username, password)----> STOP"); 
        WL.Logger.info("response: " + JSON.stringify(response)); 
        return response; 
    } 
    function onLogout() { 
    
        WL.Logger.info("onLogout()---->START"); 
        WL.Server.setActiveUser("SimpleAuthRealm", null); 
    
        //WL.Client.logout('SimpleAuthRealm'); 
        WL.Logger.info("onLogout()---->STOP"); 
    } 
    
  6. Мы создали фиктивную пользовательский интерфейс, который включает в себя страницы входа и домашнюю страницу. Кнопка входа в систему вызывает вызов функции submitAuthentication() и переносится на домашнюю страницу. Домашняя страница состоит из двух кнопок для вызова службы requestForData() и другой для службы requestForOtherData().

Вопросы, с которыми мы сталкиваемся:

требования
  1. Этот поток первого вызвать защищенную услугу, например, requestForData и сервер ответных запросов ответят на вызов, который мы очистим, предоставив учетные данные пользователя. Мы требуем иного подхода, мы хотим предоставить учетные данные пользователя и начать сеанс, чтобы все сервисы, защищенные этой областью (тест безопасности), были доступны.
  2. Как только мы очистим вызов для первого обслуживания, мы можем вызвать другую услугу, не предоставляя учетные данные пользователя, но при вызове следующей службы мы не передаем идентификацию вызывающего клиента, это заставляет нас полагать, что сеанс, установленный в первой службе вызов вызова для всех/любого пользователя, не являющегося пользователем. Нам нужен очень специфичный для пользователя сеанс.

Прокомментируйте, если это хорошая идея для поддержания сеанса на сервере промежуточного программного обеспечения, поскольку мы работаем над банковским мобильным приложением. Пожалуйста, предложите решения на выше ...

ответ

2

Для # 1 рассмотрите возможность установки теста безопасности во всех средах приложений (в дескрипторе приложения) и вызова WL.Client.connect при запуске приложения (вы должны делать это в любом случае) Это инициирует аутентификацию, когда приложение первоначально связывается с сервером Worklight.Как только это будет завершено, вы сможете получить доступ к адаптерам, защищенным с помощью тестов безопасности, в той же области без дополнительных проблем.

Для # 2, когда вы устанавливаете соединение с сервером Worklight, вы создаете сеанс, который сервер отслеживает как ваш, поэтому, даже если вы еще не предоставляете учетные данные, сервер Worklight знает, какой аутентифицированный пользователь делает каждый вызов адаптера.

+0

Спасибо за ваш ответ david, следующие сомнения, которые все еще сохраняются-1. У нас есть услуги, которые нужно вызывать даже без проверки подлинности. Если мы попросим аутентификацию при первом подключении, он сам спросит имя пользователя и пароль, и если у пользователя нет учетных данных, он даже не сможет получить доступ к службам, которые не требовали аутентификации. – Sumit

+0

... Если мы попросим аутентификацию при первом подключении, он сам спросит имя пользователя и пароль, и если у пользователя нет учетных данных, он даже не сможет получить доступ к службам, которые не требовали аутентификации. 2.Session поддерживается на основе User и Device, т. Е. Если мы используем два устройства и входим в систему с одним и тем же пользователем, но все же создаются отдельные сеансы, которые ожидаются, но мы явно не передаем токен устройства или идентификатор пользователя в последующей службе звонки. Как это работает автоматически ... – Sumit

+0

Если у вас есть требование, чтобы приложение имело некоторые функции, которые работают без входа в систему, а некоторые, требующие входа в систему, то аутентификация на запуск не для вас. Я неправильно понял вашу обеспокоенность? Если вы не защищаете приложение, а просто защищаете сервисы, сервер отправляет вызов при первой попытке доступа к защищенной службе. С этого момента (пока сеанс мобильного приложения с подсветкой работы действителен) приложение может получить доступ к службам, защищенным в той же области, без дополнительных проблем. –