【发布时间】:2018-10-17 18:47:03
【问题描述】:
我在 SAP 后端创建了一个用于 websocket 连接的服务。我想从 SAPUI5 应用程序连接到该服务。我像这样连接到服务:
sap.ui.require("sap/ui/core/ws/WebSocket");
var socket = new WebSocket(
'ws://<host>:<port>/sap/bc/apc/sap/z_reg_test_push_ch');
当这段代码被调用时,我得到:
WebSocket connection to 'ws://<host>:<port>/sap/bc/apc/sap/z_reg_test_push_ch' failed: HTTP Authentication failed; no valid credentials available
当我从后端测试服务时,它会在 chrome 中打开服务 url 并要求我提供凭据。然后,当我刷新 UI5 应用程序时,会建立 Web 服务连接,因为在从后端测试服务时,用户已经在 chrome 中登录了相同的会话。
在 SAPUI5 应用程序中,我可以访问连接到 oData 服务时返回的安全令牌。我可以访问的是这样的:
var oModel = sap.ui.getCore().getModel();
oModel.getSecurityToken();
令牌如下所示:cKYPxpo7-BELSah1D1WRgg==
我发现 a thread 我应该像这样创建 websocket 连接:
new WebSocket('ws://<host>:<port>/sap/bc/apc/sap/z_reg_test_push_ch',["access_token", oModel.getSecurityToken()]);
但我收到了这条消息:
Uncaught DOMException: Failed to construct 'WebSocket': The subprotocol 'cKYPxpo7-BELSah1D1WRgg==' is invalid.
总结一下。我通过基本身份验证由 oData 服务进行身份验证,我想将身份验证信息传递给套接字。
【问题讨论】:
-
我不认为它是这样工作的,
getSecurityToken返回 csrf 令牌,而不是承载令牌 -
那么我应该如何将凭据传递给 websocket?
-
我真的不知道。实际值在其中一个 cookie 中
-
我只记得有个东西叫 ABAP Channels。我认为它只是一个套接字实现/包装器。有一些关于在 UI5 中使用它的博客。
-
是的,我浏览了所有教程和文档,但没有人真正解释如何验证 WebSocket。对他们来说,它以某种方式奏效了。