2009-01-09 63 views
1

一些現有的Web服務消費我有一個看起來像這樣的方法:如何將身份驗證密鑰傳遞給寧靜的Web服務?

List<Employee> employees = 
     employeeService.GetEmployees(accessKey, allDepartments); 

的ACCESSKEY有兩個目的;它充當認證和識別。只有有效的訪問代碼被響應(認證),並且它作爲特定客戶端數據的鏈接提供服務。

如果服務都可以重新做一個寧靜的方式我不知道如何做到這一點來實現。我絕對不想做這樣的事情:

http://www.business.com/<GuidHere>/Employees/ 

因爲這將顯示ACCESSKEY,這有點祕密,(即,其通常在使用這個客戶端上的加密文件),我們不能在URI中顯示GUID。這樣的事情是如何使用寧靜的架構實現的?

回答

7

你可以使用HTTP頭髮送認證令牌。

+1

是 - 在一個RESTful的環境中做到這一點的首選方法肯定是把它放到一個cookie /頭。 – 2012-11-02 17:32:58

+0

你可以粘貼一些代碼片段嗎?我正在使用球衣來使用RESTFul服務 – vikifor 2017-05-18 13:57:28

0

特洛伊奧爾福德指出,我原來的建議是不正確的。你不應該在這種情況下使用POST。您應該使用HTTP頭中的身份驗證信息使用GET請求。看看basic access authentication的一種方法來做到這一點。

+0

雖然他提到這是一個RESTful服務。除非要將某些內容保存到服務器,否則不應在RESTful體系結構中使用「POST」動詞。 – 2012-11-02 17:32:24

1

如果這是一個RESTful 網絡服務我假設它正在被一臺機器使用,所以爲什麼不在URL中傳遞訪問密鑰?

在然後結束,你需要把它的地方,並在瀏覽器中隱藏它們隱藏的表單字段(如果服務是要瀏覽的)這一天是不是安全的方式很多。

如果該鍵是非常敏感的,爲什麼不是對稱加密每個會話的服務器上,並通過該值左右呢?

只是有些想法。
Kev

1

如果時間不是實施OAuth安全性的問題可能會有用。 OAuth使用公鑰,也是一個祕密。亂七八糟的(大多數情況下),服務器將使用公鑰+它的祕密副本做相同的哈希,並確保其結果匹配請求。

的好處是,你不需要使用HTTPS或POST。獲取* REST api方法應該使用HTTP GET方法(我不確定是否RESTful是你的目標,只是認爲我會指出)。我同意龐先生使用http://www.business.com/employees。查詢字符串可能包含部門標識列表。

對於你的情況,服務調用不會有'accessKey'參數,而是它會成爲公鑰(我想象)並用於頭部,查詢字符串或POST參數。

OAuth的一些好的信息:http://www.hueniverse.com/hueniverse/