2017-10-06 57 views
1

我需要重置CSRF令牌的OData的模型。基于UI5文档,我试图用refreshSecurityToken(fnSuccess?, fnError?, bAsync?)函数来做到这一点。 (click here for referenceSAP GATEWAY&UI5:如何可以重置令牌CSRF =

我写了下面的代码:

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

我该怎么办?

回答

0

可以通过交易SM05删除CSRF令牌(每用户/令牌)。

+0

我会检查它。任何其他功能模块用于重置CSRF令牌并不删除? –

+0

重置是什么意思?为什么你想重置令牌? – mash

+0

需要重新设置才能将新文件发送到CMS。 –

-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 

而且那么您应该将新令牌存储在令牌变量中,并且如果令牌被重置,则允许上传。

请问候, 恩里克马托斯