2010-01-08 49 views
1

我想建立一個(現在)真正簡單的Web服務。簡單來說,我的意思是在代碼方面只有少量的實際工作要做。它只有一個方法/功能:客戶端發送用戶登錄信息,服務響應一個關於用戶的非常安全的細節(針對這個問題,假設用戶的生日)。針對一個Web服務的基於角色的方法?

我有很多的問題,但現在我想知道:

我正在考慮有這種方法的兩個版本。在版本一中,客戶端只能創建一個沒有可變信息的通用請求。該服務將以在客戶會話中驗證身份的人的生日作爲迴應。在版本二中,允許客戶查詢任何用戶名(真的,他們想要的任何東西)並找回生日或「找不到」等。

提供兩者的應用程序將使大多數開發人員會得到當前用戶的出生日期,以便它可以應用於該會話。擴展我的例子:用戶登錄後,開發人員希望能夠擁有「生日快樂」(如果適用)。服務/數據的所有者不希望開發人員的客戶對任何有關用戶的任何訪問(真實的或概念的),即使他們登錄,他們只是想適應開發人員的目標,因爲它非常好。開發人員不想爲可能訪問任何東西負責,他只是想要很好。

第二版適用於某些用戶支持組。他們實際上需要查找打電話的用戶的生日,以便他們確認用戶的年齡足夠大,比如說租一輛車。他們甚至可能不得不查看多個用戶,以查看誰最有資格參加該組,以獲得最佳交易。

所以我想最大的問題是,這兩種方法是否可以存在於同一個服務中?

此時,協議更可能是基於SOAP的,然後是RESTful,因此只需擁有解析爲相同服務但只提供不同方法的URL可能不是一種選擇。

理想情況下,我需要的是一種基於角色來揭示WSDL中操作的方式。很明顯,給任何一個組的文件只會反映出適合該角色的操作,但理想情況下,開發人員/客戶應該:a)不會看到他們不應該做的任何操作,並且b)嘗試使用禁止的響應時收到相同類型的響應因爲他們會是一個不存在的人,最理想的情況是,他們會收到前面提到的錯誤,因爲他們的角色確實不存在這種操作,並不是因爲服務採取了額外的預防措施,以防客戶端嘗試(它會這樣做,僅供參考,但我不希望它成爲混淆的第一級也是唯一級別)。

我在做夢中不可能的夢嗎?

快速附錄

我應該更具體瞭解這一點,我意識到。當我說「基於角色」時,我指的是服務帳戶,而不是用戶帳戶。因此,在上面的假設情況下,用於查詢任何用戶ID的用戶服務應用程序將使用一個服務帳戶與priv來執行此操作,而不檢查登錄到會話的代理程序的角色(這將是顯然是爲了獲得應用程序,但不是爲了服務)。

+0

+1。非常有趣的一個。 – KB22 2010-01-08 13:09:28

回答

0

爲什麼不能有兩個方法:

GetMyBirthday(); 

GetBirthday(string userName); 

任何用戶都可以調用第一個方法;只有特權用戶可以調用第二種方法。您使用基於角色的授權並拒絕來自未授權用戶的第二種方法的呼叫。

我不明白爲什麼你想隱藏基於角色的WSDL中的方法。在很多情況下,您只會訪問WSDL以在開發環境中構建代理,並且在運行時不需要它。

+0

我想在我的腦海裏,我試圖隱藏方法來降低誘惑和內疚。我知道,當我看到一些整潔的東西時,我想嘗試一下,當我「禁止」時,我想我會因爲好奇而陷入困境。此外,這項服務在很長一段時間裏一直是我的客戶的加力燃燒,特別是因爲安全是一個問題,我想給他們所有可以想象的保證。 – Anthony 2010-01-08 13:28:48