【问题标题】:SAPUI5 WebSocket authenticationSAPUI5 WebSocket 身份验证
【发布时间】: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。对他们来说,它以某种方式奏效了。

标签: websocket sapui5


【解决方案1】:

我发现要将用户凭据传递给 ICF 服务,您必须像这样创建 websocket:

new WebSocket('ws://<username>:<password>@<host>:<port>/<path_to_service>')

然而,这引发了一个安全问题,因为连接不安全,因此每个人都可以读取用户凭据。

但我没有找到任何其他验证用户的解决方案。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2021-08-22
    • 2014-04-30
    • 2021-10-04
    • 1970-01-01
    • 2018-05-05
    • 2015-06-02
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多