Мне удалось настроить службу веб-сокетов в Knox, которая в тестовых целях 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
Моя конфигурация Knox для служб http работает таким образом, что мне нужно указать учетные данные, иначе я получаю 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
Я бы хотел добиться того же результата с веб-сокетами.
[РЕДАКТИРОВАТЬ]
Более того, я не совсем понимаю приведенную выше конфигурацию service.xml для моей службы websocket, поскольку она отличается от простейшей возможной конфигурации службы http, которую я смог использовать:
<service role="MY_APP" name="my_app" version="0.0.1">
<routes>
<route path="/my_app/**"/>
</routes>
</service>
- Зачем в случае службы websocket мне нужны
policies
и что они означают? - Почему
<routes>/<route>
имеет элемент<rewrite>
и какова его семантика? Соответствует ли он<rule>/<rewrite>
из rewrite.xml? Что тамrequest.url
?