如何使用基本身份验证在ApacheKnox中配置websocket服务
我设法在Knox中配置了一个websocket服务,出于测试目的,它是如何使用基本身份验证在ApacheKnox中配置websocket服务,websocket,knox-gateway,Websocket,Knox Gateway,我设法在Knox中配置了一个websocket服务,出于测试目的,它是ws://echo.websocket.org 以下是我的配置文件: service.xml <service role="ECHOWS" name="echows" version="0.0.1"> <policies> <policy role="webappsec"/> <policy role="authentication" name="A
ws://echo.websocket.org
以下是我的配置文件:
service.xml
<service role="ECHOWS" name="echows" version="0.0.1">
<policies>
<policy role="webappsec"/>
<policy role="authentication" name="Anonymous"/>
<policy role="rewrite"/>
<policy role="authorization"/>
</policies>
<routes>
<route path="/echows">
<rewrite apply="ECHOWS/echows/inbound" to="request.url"/>
</route>
</routes>
</service>
<rules>
<rule dir="IN" name="ECHOWS/echows/inbound" pattern="*://*:*/**/echows">
<rewrite template="{$serviceUrl[ECHOWS]}"/>
</rule>
</rules>
rewrite.xml
<service role="ECHOWS" name="echows" version="0.0.1">
<policies>
<policy role="webappsec"/>
<policy role="authentication" name="Anonymous"/>
<policy role="rewrite"/>
<policy role="authorization"/>
</policies>
<routes>
<route path="/echows">
<rewrite apply="ECHOWS/echows/inbound" to="request.url"/>
</route>
</routes>
</service>
<rules>
<rule dir="IN" name="ECHOWS/echows/inbound" pattern="*://*:*/**/echows">
<rewrite template="{$serviceUrl[ECHOWS]}"/>
</rule>
</rules>
{topology}.xml部分:
<service>
<role>ECHOWS</role>
<url>ws://echo.websocket.org</url>
</service>
埃克沃斯
ws://echo.websocket.org
我可以连接到它:
wscat -c wss://my-knox-server/gateway/default/echows
connected (press CTRL+C to quit)
> Hello Knox!
< Hello Knox!
wscat-cwss://my-knox-server/gateway/default/echows
已连接(按CTRL+C退出)
>你好,诺克斯!
<你好,诺克斯!
但我希望Knox仅在提供正确凭据时才接受连接:
wscat --auth <username:password> -c wss://my-knox-server/gateway/default/echows
wscat--auth-cwss://my-knox-server/gateway/default/echows
我的http服务Knox配置的工作方式是,我必须放入凭据,否则我将得到401:
curl -i https://my-knox-server/gateway/default/my_service/ping
HTTP/1.1 401 Unauthorized
curl -i -u '<user>:<password>' https://my-knox-server/gateway/default/my_service/ping
HTTP/1.1 200 OK
curl-ihttps://my-knox-server/gateway/default/my_service/ping
HTTP/1.1 401未经授权
旋度-i-u':'https://my-knox-server/gateway/default/my_service/ping
HTTP/1.1200ok
我想用WebSocket实现同样的结果
[编辑]
此外,我不完全理解websocket服务的上述service.xml配置,因为它不同于我能够使用的http服务的最简单配置:
<service role="MY_APP" name="my_app" version="0.0.1">
<routes>
<route path="/my_app/**"/>
</routes>
</service>
策略
,它们是什么意思/
有一个元素
,它的语义是什么?它是否对应于rewrite.xml中的/
?那里的request.url
是什么意思好问题,不幸的是,Knox中的身份验证和授权机制基于Http servlet过滤器,这不适用于Websocket 您可以做的一件事是让HTTP端进行身份验证,然后打开websocket连接 如果您愿意,可以打开此增强功能的 [编辑] 对后续问题的答复
为什么在websocket连接的情况下不能使用http servlet过滤器?它们是由http请求初始化的,对吗?一旦检测到ws协议,Knox就会使用websocket处理程序(由jetty使用)绕过servlet过滤器。谢谢@SandeepMore,我添加了一些问题,你能看一下吗?