gpt4 book ai didi

sockets - ABAP Websocket 服务器 XSRF token

转载 作者:行者123 更新时间:2023-12-03 11:54:02 24 4
gpt4 key购买 nike

我目前正在尝试在 SAP 应用程序服务器上设置一个 web-socket 服务器作为概念证明。连接到 web-socket 服务器的应用程序不会是 UI5 或 WebDynpro 应用程序,而只是在 headless 计算机上运行的中间件程序。

按照快速指南,我已经设置了推送 channel ,并且我有一个带有接口(interface)方法的对象 ON_START , ON_MESSAGE等等。我目前正在使用 wscat 测试接口(interface)您可以从 npm 获得.

当我第一次尝试使用 wscat 连接到我的服务时我收到 HTTP 500 错误。

enter image description here

我不确定为什么会收到 500 错误,因此我尝试通过 http 和 Web 浏览器访问 URL 以查看发生了什么。

500 SAP Internal Server Error

ERROR: Cross-Site Request Forgery (XSRF) check has failed ! (termination: ABORT_MESSAGE_STATE)

我已经看到网关服务也在使用这些 token ,所以我创建了一个快速网关服务并发送了 GET请求 X-CSRF-Token: Fetch除了当我尝试使用 uri 参数 sap-XSRF 时,我从中获得的 token 不起作用.

往前走,我开始调试 CL_APC_MANAGER功能 HANDLE_REQUEST看看我的请求是否进来了。我还想追踪 500 错误的来源。我设法将其追溯到 CL_APC_MANAGER方法 CHECK_XSRF .
METHOD check_xsrf.
DATA: lv_xsrf_token TYPE string.
*
* validate XSRF token
*
lv_xsrf_token = i_server->request->get_form_field( name = if_http_form_fields_sap=>sap_xsrf ).
IF lv_xsrf_token IS INITIAL.
lv_xsrf_token = i_server->request->get_header_field( name = if_http_form_fields_sap=>sap_xsrf ).
ENDIF.

IF lv_xsrf_token IS INITIAL.
r_successful = abap_false.
ELSE.

CALL METHOD i_server->validate_xsrf_token
EXPORTING
token = lv_xsrf_token
IMPORTING
successful = r_successful
EXCEPTIONS
token_not_found = 1
cookie_not_found = 2
internal_error = 3
called_by_public_service = 4
OTHERS = 5.
IF sy-subrc <> 0 OR abap_false = r_successful.
r_successful = abap_false.
ELSE.
r_successful = abap_true.
ENDIF.
ENDIF.

ENDMETHOD.

如果我使用调试器手动跳过此检查,则我可以毫无问题地连接到我的 web-socket 服务器。

enter image description here

但是,我完全不确定在尝试连接之前我应该​​如何获得这个 token 。我注意到 XSRF Tokens保存在数据库表 SECURITY_CONTEXT .唯一的问题是在此表中创建了一个条目,其中包含我需要的 key 在我尝试连接后 .我需要它 之前 而且我不确定正确检索 token 的过程是什么。

有没有人以前使用过这些可以提供一些启示?提前致谢。

编辑 我正在使用带有 Service Pack 4 的版本 740。

最佳答案

正确生成标题的“正确”方法是维护表 APC_CROSS_ORIGIN (交易 SAPC_CROSS_ORIGIN)。

WebSockets 功能仅在 7.40SP5 中发布供客户使用,这可能解释了为什么您的系统中没有该表。我建议现在使用您的解决方法,直到您的系统被修补。

关于sockets - ABAP Websocket 服务器 XSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com