Как настроить службу веб-сокетов в Apache Knox с базовой аутентификацией

Мне удалось настроить службу веб-сокетов в 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>
  1. Почему в случае службы websocket мне нужно policiesи что они значат?
  2. Зачем <routes>/<route> имеет элемент <rewrite> и какова его семантика? Соответствует ли это <rule>/<rewrite> из rewrite.xml? Что значит request.url значит там?

1 ответ

Решение

Хороший вопрос, к сожалению, механизм аутентификации и авторизации в Knox основан на фильтрах сервлетов Http, которые не будут применимы для Websocket.

Одна вещь, которую вы можете сделать, это иметь сторону HTTP, которая выполняет аутентификацию, а затем открывает соединение через веб-сокет.

Если вы хотите, вы можете открыть JIRA для этого улучшения.

[РЕДАКТИРОВАТЬ]

Ответы на дополнительные вопросы

  1. В случае, если Websockets не имеют значения, они являются артефактами от http
  2. Опять же, в переписывается лучше объяснить с http-контекста, чем с websocket. Они сообщают Knox, когда следует применять правило перезаписи, т.е. request.url, request.body, response.url, response.body и т. Д. Поскольку правила основаны на фильтрах сервлетов HTTP, они не используются для перезаписи данных веб-сокетов. Я полагаю, что для этого должна быть какая-то джира.
Другие вопросы по тегам