Адаптер Worklight: базовая аутентификация. Как я могу настроить, чтобы все мои адаптеры отправляли учетные данные ActiveUser в заголовке каждой процедуры?

У меня есть страница входа в Worklight, которая устанавливает активного пользователя на сервере worklight. Это устанавливает userIdentity. В этом userIdentity я сохраняю зашифрованную строку «имя пользователя: пароль».

Каждый раз, когда вызывается процедура адаптера, она проверяет, вошел ли пользователь в систему. Когда он входит в систему, вызывается процедура.

В бэкенде я использую базовую аутентификацию для каждого вызова REST. Поэтому мне нужно в заголовке каждого вызова ->

    Authorization: Basic  encrypted(username:password)

Когда я издеваюсь над этим, все работает. Пример ->

    var input = {
    method : 'get',
    returnedContentType : 'json',
    path : path,
     headers:{
            Authorization: "Basic "+"dGVzdDp0ZXN0"
        }

Мне нужно установить, что каждый раз, когда вызывается процедура, это «имя пользователя: пароль» является именем пользователя: паролем из userIdentity пользователя, который вошел в систему на worklightserver.

Как я могу это сделать?


Авторизация адаптера HTTP в IBM Worklight

Здесь они используют $(username), но я не знаю, на что ссылается знак $.


person Ken Vernaillen    schedule 12.11.2013    source источник


Ответы (2)


Я не думаю, что это лучший способ, но он работает для меня...

при установке userIdentity я добавил loginString в объект пользователя. этот объект содержит учетные данные var, которые я инициировал в адаптере входа в систему.

строка входа = encode.encode_base64 (пользователь: пароль);

идентификатор пользователя = {

    userID:"01",
    displayName: "name",
    credentials:loginstring, 
    teacherId:"212",

}

WL.Server.setActiveUser("AuthRealm", userIdentity);

Затем в адаптере вы можете получить доступ к объекту userIdentity:

функция получить () {

var user = WL.Server.getActiveUser("AuthRealm");
var input = {
    method : 'get',
    returnedContentType : 'json',
    headers:{
        Authorization: "Basic " + user.credentials
    },
    path : 'path',
};

вернуть WL.Server.invokeHttp (ввод); }

person Fred De Ryck    schedule 14.11.2013

В вашей политике подключения все, что вам нужно, это:

        <authentication>
            <basic/>
        </authentication>  

Затем для каждой из ваших процедур используйте:

<procedure name="getFeed" connectAs="endUser"/>

Вам нужен только serverIdentity, если вы используете connectAs="server"

person David Dhuyveter    schedule 12.11.2013
comment
Таким образом, userIdentity должен иметь имя пользователя и пароль? - person Ken Vernaillen; 12.11.2013
comment
Вы указали, что вам нужна внутренняя аутентификация на основе идентификатора пользователя/пароля вошедшего в систему пользователя, а не фиксированного идентификатора сервера. Вам нужно только настроить идентификатор пользователя/пароль, если вы хотите использовать один идентификатор сервера для всех вызовов. Чтобы connectAs=endUser работал с базовой аутентификацией, мобильным устройствам необходимо войти в Worklight с помощью идентификатора пользователя/пароля. Какой модуль входа вы используете? - person David Dhuyveter; 12.11.2013
comment
Мы используем модуль nonValidatingLoginModule. Какие точные параметры должен иметь userIdentity? Будет ли имя пользователя: тест, пароль: тест в объекте userIdentity работать для базовой аутентификации, для которой требуется тестовый тест для входа? - person Ken Vernaillen; 12.11.2013
comment
любое имя пользователя и пароль, предоставленные мобильным устройством при входе в систему, будут использоваться в основном заголовке аутентификации. вам не нужно делать ничего, кроме защиты процедур адаптера (определить тест безопасности для процедур), и все это должно просто работать. - person David Dhuyveter; 12.11.2013
comment
Можете привести пример входа? - person Ken Vernaillen; 13.11.2013