我设法在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="Anonymous"/>
<policy role="rewrite"/>
<policy role="authorization"/>
</policies>
<routes>
<route path="/echows">
<rewrite apply="ECHOWS/echows/inbound" to="request.url"/>
</route>
</routes>
</service>
rewrite.xml
<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>
我可以连接到它:
wscat -c wss://my-knox-server/gateway/default/echows
connected (press CTRL+C to quit)
> Hello Knox!
< Hello Knox!
但是,只有在给出适当的凭据时,我才会希望Knox接受连接:
wscat --auth <username:password> -c wss://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
我想用websockets获得相同的结果。
[编辑]
此外,我不完全理解我的websocket服务的上述 service.xml 配置,因为它与我能够使用的http服务的最简单的可能配置不同:< / p>
<service role="MY_APP" name="my_app" version="0.0.1">
<routes>
<route path="/my_app/**"/>
</routes>
</service>
policies
,它们是什么意思?<routes>/<route>
有一个元素<rewrite>
,它的语义是什么?它与 rewrite.xml 中的<rule>/<rewrite>
相对应吗? request.url
意味着什么?答案 0 :(得分:1)
很好的问题,不幸的是,Knox中的身份验证和授权机制基于Http servlet过滤器,它不适用于Websocket。
您可以做的一件事就是让HTTP端进行身份验证,然后打开websocket连接。
如果您愿意,可以为此增强功能打开JIRA。
[编辑]
后续问题的答案