2008-11-07 110 views
6

我們有一個.NET Web服務API。目前,人們使用SOAP定義來使用API​​,因爲我們需要通過SOAP頭中的自定義認證元素進行認證。完美的作品。精細。什麼是驗證Web服務的最佳方式

SOAP要求該請求爲POST。我們希望允許用戶使用GET動詞(因此它可以被緩存)。

那麼,提供一個簡單的GET API(不一定是web服務!)也提供身份驗證的最佳方式是什麼?

例如API路線:

http://www.blah.com/api/Search?query=Foo

這是可以接受的,共同的做法?

http://www.blah.com/api/Search?query=Foo&Key=<some guid>

注:我也不想實現SSL也不在IIS安裝額外的軟件或插件,等等,等等

回答

1

如果Web服務需要被保護,而且我假設它是因爲你現在有一個認證頭,那麼你應該重新考慮使用GET和不使用SSL,至少對於認證部分。至少我會通過SSL向Web服務/應用程序發佈授權請求。如果您不想爲每個請求提供身份驗證,那麼您將需要接受(並在服務中生成)授權cookie,以供消費者用於後續請求。

我會避免在URL中使用身份驗證,因爲您希望支持GET - 如果可以緩存URL,那麼憑據也將被緩存。這打破了Web服務的安全性,因爲任何人都可以重用緩存的憑證。

+0

*)緩存應該只發生在客戶端..所以憑據應該是相同的。 ??? *)請詳細談談授權cookie? – 2008-11-07 04:16:10

0

使用只有GET的API,我會有第一個方法提取唯一的會話ID。

如:GET/API行動= AUTH &用戶名=用戶&密碼= hashedpassword 將返回一個16個字符標記,其中存儲在你的身邊,你需要爲每個後續調用這個獨特的標記。

如果API是在PHP中完成的,則可以使用它的PHP的會話處理功能來實現此目的(它具有超時/垃圾收集)。 ASP.NET中有類似的功能。

它容易受到重播攻擊(有人抓住或猜測會話ID),但如果你想要簡單的東西,那就是要走的路。任何非HTTPS網站都將以同樣的方式受到攻擊。您可以將會話ID與用戶的IP地址綁定以獲得更高的安全性。

0

如果您使用的是WCF,則可以構建在內置的安全機制之上。如果你不想使用標準框架來實現安全性,你很可能會通過默默無聞的方式來實現安全。

+0

我嘗試了一個簡單的Web服務原型的WCF。我是一個面向代碼的開發人員,所有這些xml配置都讓我失望。此外,我從未發現如何添加自定義授權。 – 2008-12-24 13:48:11

1

如果您的客戶端位於同一個域中,則可以在IIS應用程序中打開集成Windows身份驗證。您的應用程序現在只接受Windows認證的用戶。添加您自己的RoleProvider以實現更精細,基於角色的粒度。

0

與Thomas Eyde的答案類似:您可以使用siteminder之類的單一登錄系統來保護URL。調用者請求需要包含令牌,該令牌通常存儲在cookie中,但可以添加到查詢字符串中。

如果不使用SSL,任何SSO或Web服務管理平臺都將有意使認證變得困難。

相關問題