SAP GATEWAY& UI5:如何重置CSRF令牌?=

时间:2017-10-06 10:00:29

标签: sapui5 sap abap gateway

我需要在OData模型中重置CSRF令牌。基于UI5文档,我试图用refreshSecurityToken(fnSuccess?, fnError?, bAsync?)函数来做到这一点。 (click here for reference

我写了以下代码:

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编码缺少一些东西。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以通过事务SM05删除CSRF令牌(每个用户/令牌)。

答案 1 :(得分:-1)

您似乎需要在前端应用程序中设置一个间隔,以便更频繁地获取和更新令牌。但这是一个悖论:如果你的后端将超时设置为30分钟,你为什么要将它保持更长时间?

SecurityToken超时非常重要,可确保正在使用活动会话,并且没有人“忘记”它并使系统保持打开状态并取消监视/未使用。

但是如果你真的需要保持前端会话始终可用并强制后端也是如此,你可以通过setInterval()来获取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

然后你应该将你的新令牌存储在令牌变量中,并在重置令牌时允许上传。

请问, Henrique Mattos