SAP GATEWAY и UI5: как сбросить токен CSRF? =

Мне нужно сбросить токен CSRF в модели OData. Основываясь на документации UI5, я пытаюсь сделать это с помощью функции refreshSecurityToken(fnSuccess?, fnError?, bAsync?). (нажмите здесь для справки)

Я написал следующий код:

var oDataModel = this.getOwnerComponent().getModel("ZMDM_ODATA_FILE_SRV");
    oDataModel.setTokenHandlingEnabled(true);
    oDataModel.refreshSecurityToken(function() {
        var token = oDataModel.getSecurityToken();
        console.log(token);
        // can upload the file if token reset
    });

Проблема в том, что этот токен не сбрасывается в течение 30 минут, и это время ожидания сеанса. Фактически это действительно в течение всего сеанса. Я даже проверил следующую ссылку:

https://blogs.sap.com/2014/08/26/gateway-protection-against-cross-site-request-forgery-attacks/

На самом деле у многих была эта проблема, но я не мог найти четкого решения для сброса токена. Я выполнил все необходимые шаги во внешнем интерфейсе для отправки запроса Head для остановки токена. Я думаю, что чего-то не хватает в настройках внутреннего шлюза или кодировании ABAP.

Что мне нужно сделать?


person MJBZA    schedule 06.10.2017    source источник


Ответы (2)


Похоже, вам нужно установить интервал во внешнем приложении, чтобы чаще получать и обновлять токен. Но это парадокс: если ваша серверная часть устанавливает тайм-аут на 30 минут, зачем вам оставлять его включенным дольше?

Тайм-аут SecurityToken важен для того, чтобы убедиться, что активный сеанс используется, и что никто не «забыл» его и не оставил систему открытой и не наблюдаемой / не использованной.

Но если вам действительно нужно, чтобы ваш интерфейсный сеанс всегда был доступен и чтобы серверный интерфейс тоже был доступен, вы можете установитьInterval () для получения CSRF и обновления приложения:

var oDataModel = this.getOwnerComponent().getModel("ZMDM_ODATA_FILE_SRV");
oDataModel.setTokenHandlingEnabled(true);
var fnRefreshToken = oDataModel.refreshSecurityToken(function() {
    var token = oDataModel.getSecurityToken();
    console.log(token);
    // can upload the file if token reset
});
window.setInterval(function(){
    fnRefreshToken;
}, 1800000); // where 1.800.000 miliseconds represents 30 minutes

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

С уважением, Энрике Маттос

person Henrique Mattos    schedule 08.10.2017

Вы можете удалить токен CSRF (для каждого пользователя / токена) с помощью транзакции SM05.

person mash    schedule 07.10.2017
comment
Я проверю. Любые другие функциональные модули для сброса токена CSRF, а не удаления? - person MJBZA; 08.10.2017
comment
Что вы имеете в виду под сбросом? Почему вы хотите сбросить токен именно? - person mash; 08.10.2017
comment
Его необходимо сбросить, чтобы можно было отправить новый файл в CMS. - person MJBZA; 09.10.2017
comment
Нет, его не нужно сбрасывать при каждом вызове метода abap CREATE_STREAM. Вы можете повторно использовать свои токены. Если ваш бэкэнд не принимает только что сгенерированный токен, значит, что-то еще не так. - person mash; 09.10.2017