繁体   English   中英

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

[英]SAP GATEWAY & UI5: How can reset the CSRF token?=

我需要在 OData 模型中重置 CSRF 令牌。 基于 UI5 文档,我正在尝试使用refreshSecurityToken(fnSuccess?, fnError?, bAsync?)函数来做到这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 编码方面缺少一些东西。

我该怎么办?

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

似乎您需要在前端应用程序中设置一个时间间隔以更频繁地获取和更新令牌。 但这是一个悖论:如果您的后端将超时设置为 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

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

亲切的问候, 恩里克·马托斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM