2017-10-05 24 views
1

我設法配置諾克斯一個WebSocket的服務,用於測試目的是ws://echo.websocket.org如何在Apache中諾克斯配置的WebSocket服務與基本身份驗證

這裏是我的配置文件:

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> 

{}拓撲的.xml部分:

​​

我可以連接到它:

wscat -c wss://my-knox-server/gateway/default/echows 
connected (press CTRL+C to quit) 
> Hello Knox! 
< Hello Knox! 

但我想諾克斯接受連接,只有當適當的憑證給出:

wscat --auth <username:password> -c wss://my-knox-server/gateway/default/echows 

用於http服務的My 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服務,我能夠用最簡單的可能配置不同:

<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.xmlrequest.url是什麼意思?

回答

1

很好的問題,不幸的是,Knox中的認證和授權機制基於Http servlet過濾器,它不適用於Websocket。

你可以做的一件事是有一個HTTP端進行身份驗證,然後打開websocket連接。

如果你想要的話,你可以打開一個JIRA這個增強。

[編輯]

答案後續問題

  1. 在的WebSockets的情況下沒有任何意義,它們是從http
  2. 工件再次在重寫可以更好地比以http上下文來解釋WebSocket的。他們所做的是告訴Knox何時應用重寫規則,即request.url,request.body,response.url,response.body等。因爲規則基於HTTP servlet過濾器,所以它們不用於重寫websocket數據。我相信應該有一些JIRA來解決這個問題。
+0

爲什麼在websocket連接的情況下不能使用http servlet過濾器?他們通過http請求進行初始化,對吧? – tomek

+0

那麼,一旦檢測到ws協議,Knox使用websocket處理程序(由jetty使用)繞過servlet過濾器。 –

+0

謝謝@Sandeep更多,我還增加了一些問題,你可以看看他們嗎? – tomek

相關問題