SAP GATEWAY & UI5:如何重置 CSRF 令牌?=
SAP GATEWAY & UI5: How can reset the CSRF token?=
我需要在 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 分钟内没有重置,那是我们的会话超时。实际上它在会话生命周期内有效。我什至检查了以下 link:
https://blogs.sap.com/2014/08/26/gateway-protection-against-cross-site-request-forgery-attacks/
其实很多人遇到过这个问题,但是我没有找到明确的重置token的解决方案。我在前端完成了发送 Head 请求以保留令牌的所有必需步骤。我认为后端网关设置或 ABAP 编码方面缺少某些内容。
我需要做什么?
您可以通过事务 SM05 删除 CSRF 令牌(每个 user/token)。
您似乎需要在前端应用程序中设置一个时间间隔,以便更频繁地获取和更新令牌。但这是一个悖论:如果你的后端将超时设置为 30 分钟,你为什么要让它存活更长时间?
SecurityToken 超时对于确保正在使用活动会话并且没有人 "forgot" 它并使系统保持打开状态和 unwatched/unused.
很重要
但如果您确实需要保持前端会话始终可用并强制后端也可用,您可以使用 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
然后您应该将新令牌存储在令牌变量中,并在重置令牌时允许上传。
此致
恩里克·马托斯
我需要在 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 分钟内没有重置,那是我们的会话超时。实际上它在会话生命周期内有效。我什至检查了以下 link:
https://blogs.sap.com/2014/08/26/gateway-protection-against-cross-site-request-forgery-attacks/
其实很多人遇到过这个问题,但是我没有找到明确的重置token的解决方案。我在前端完成了发送 Head 请求以保留令牌的所有必需步骤。我认为后端网关设置或 ABAP 编码方面缺少某些内容。
我需要做什么?
您可以通过事务 SM05 删除 CSRF 令牌(每个 user/token)。
您似乎需要在前端应用程序中设置一个时间间隔,以便更频繁地获取和更新令牌。但这是一个悖论:如果你的后端将超时设置为 30 分钟,你为什么要让它存活更长时间?
SecurityToken 超时对于确保正在使用活动会话并且没有人 "forgot" 它并使系统保持打开状态和 unwatched/unused.
很重要但如果您确实需要保持前端会话始终可用并强制后端也可用,您可以使用 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
然后您应该将新令牌存储在令牌变量中,并在重置令牌时允许上传。
此致 恩里克·马托斯