如何通过WSO2(API管理器)将自定义授权标头传递到我的后端Websocket服务?

时间:2019-05-27 16:10:00

标签: java websocket wso2

我在WSO2中使用Websocket api。我需要将自定义标头传递给后端Websocket服务。我在这里找到了文档 https://docs.wso2.com/display/AM210/Adding+Mediation+Extensions

但这是针对其余api调用而不是针对Websocket。因此,如何通过WSO2将自定义标头发送到后端Websocket服务。

1 个答案:

答案 0 :(得分:2)

您可以在初始WebSocket握手中将自定义标头发送到Web Socket后端。 您可以按照以下格式将其设置为客户端握手请求。

websocket.custom.header.<required-header-name> 

例如:如果期望的标头是X-JWT-Assertion,则应发送的标头是

websocket.custom.header.X-JWT-Assertion

此功能支持是从API Manager v2.6.0添加的

您无法在此处使用中介序列,因为其余的通信都是通过ws帧完成的。

添加更多信息。

这里是一个基于netty的Web套接字客户端的示例,该客户端可用于与API Manager中部署的WS API通信。 [1]

在握手中设置授权标头,如下所示。

final WebSocketClientHandler handler = new WebSocketClientHandler(
                    WebSocketClientHandshakerFactory.newHandshaker(
                            uri, WebSocketVersion.V13, null, false, new DefaultHttpHeaders()
                    .add("Authorization", "Bearer e2238f3a-e43c-3f54-a05a-dd2e4bd4631f")));

此授权标头用于与API管理器进行身份验证。如果需要发送自定义标头,则可以通过如下修改上述示例来添加另一个标头。

DefaultHttpHeaders headers = new DefaultHttpHeaders();
headers.add("Authorization", "Bearer e2238f3a-e43c-3f54-a05a-dd2e4bd4631f");
headers.add("websocket.custom.header.X-WS-UserName", "bob");

final WebSocketClientHandler handler = new WebSocketClientHandler(
                    WebSocketClientHandshakerFactory.newHandshaker(
                            uri, WebSocketVersion.V13, null, false, headers));

此标头将发送为后端,

X-WS-UserName : bob

[1] https://docs.wso2.com/download/attachments/57748790/sample-ws-client.zip?version=2&modificationDate=1484568275000&api=v2