2014-06-10 37 views
0

背景:WSO2 ESB可以扮演HTTP(S)代理的角色來調解傳入的REST API請求嗎?

我試圖使用WSO2 ESB企業設置中提供給位於要麼在企業內部,還是在互聯網上的底層REST API後端供應商的認證接入。

我的目標是有選擇地授予訪問權限,例如,僅將REST API提供者P1提供給REST客戶端C1,並僅將REST API提供者P2提供給REST客戶端C2。

使用WSO2 ESB與描述成http://wso2.com/library/articles/2012/10/implementing-restful-services-wso2-esb/的「<API>」似乎處以重新定義每一個資源,它可以是非常大的,而且容易出錯的複雜的API(如VMware的vCloud Director的REST API https://www.vmware.com/support/vcd/doc/rest-api-doc-1.5-html/landing-user_operations.html

使用WSO2 ESB「<代理>」,如 https://docs.wso2.org/display/ESB481/Using+REST+with+a+Proxy+Service#UsingRESTwithaProxyService-RESTClientandRESTService(「REST客戶端和REST服務」)中所述,強制公開給HTTP客戶端的URI將被修改爲修改後的wrt到最初支持的uri。典型的代理URI將具有服務前綴和特定端口http://:8280/services/CustomerServiceProxy/customers/123的以下形式:當客戶端可以被控制時(典型的一個內部定製的REST API)。當REST API是行業標準並且客戶端是SDK或者不在WSO2用戶控制範圍內的現成應用程序(例如AWS S3 API或vmware vcloud director REST API)時,問題就很大了

此外,一些自定義客戶端/ SDK可能會針對嵌入SDK /客戶端的公鑰驗證服務器端SSL證書。

保持HTTP REST API原樣並在其上添加一些身份驗證的常見解決方案是通過HTTP代理(可能通過HTTP代理身份驗證驗證客戶端)公開API,即客戶端先發送CONNECT請求發送他們的原始請求。這保留了完整的URI和SSL證書。

問:

有沒有辦法有WSO2 ESB起到HTTP(S)代理的調解傳入的REST API請求,維持原來的URI和服務器SSL證書的作用是什麼?

我正在考慮一個新的「< http代理>」的語法,我還沒有發現。即它會監聽http://:3128 /並響應CONNECT請求。根據CONNECT請求輸入(代理身份驗證,請求主機)和其他http傳輸標頭,中介將有能力接受或不接受CONNECT。一旦CONNECT請求被授予,甚至有可能對隨後的單個代理請求採取行動

描述CONNECT行爲的最佳規範似乎是http://tools.ietf.org/html/draft-luotonen-web-proxy-tunneling-01(1999年似乎採用的草案)和http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-22#page-29提出的標準。

對於HTTPS URI,WSO2中介內的能力可能有限:如果請求中指定了SNI(服務器名稱指示),則HTTP請求將被SSL加密,並且只有域可以被知道。至少這將允許根據代理身份驗證將某些主機名授予/拒絕一組客戶端。

回答

1

您不妨試試<inSequence>中的<property name="preserveProcessedHeaders" value="true"/>。該屬性將通過代理傳遞所有安全性頭文件。我不確定服務器證書。

下面是使用該屬性的例子: https://docs.wso2.org/display/ESB481/Sample+153%3A+Routing+Messages+that+Arrive+to+a+Proxy+Service+without+Processing+Security+Headers

我希望tlevel的API烏塞哈特幫助。您可能還想看看wso2 API管理器,它允許您有選擇地授予對API的訪問權限。