很多有關RESTful Web服務的示例都沒有考慮到今天許多應用程序都是多用戶的問題。什麼是授權和構建RESTful後端的正確方式
想象一下多用戶後臺暴露了一個RESTful API。後端數據體系結構使用共享數據庫和共享模式。每個表將包含一個tenant_id
參考:
+-------------+----+-----------------+
| tenant_name| id | shared_secret |
+-------------+----+-----------------+
| bob | 1 | 2737sm45sx543 |
+-------------+----+-----------------+
| alice | 2 | 2190sl39sa8da |
+-------------+----+-----------------+
+-------------+----+-------+-----------+
| pet_name | id | type | tenant_id |
+-------------+----+-------+-----------+
| fuffy | 1 | dog | 1 |
+-------------+----+-------+-----------+
| kerry | 2 | cat | 2 |
+-------------+----+-------+-----------+
問題1:與三個或更多與REST風格的後端交互的客戶端應用程序(例如Android,iOS和Web應用程序),你會如何進行認證對後端?
RESTful backend, API, HTTP-Verbs, shared database and schema
|
|
+---- Web Application (Client 1)
| |
| + Alice
| |
| + Bob
|
+---- Android Application (Client 2)
| |
| + Alice
| |
| + Bob
|
+---- iOS Application (Client 3)
| |
| + Alice
| |
| + Bob
|
每個客戶端都應該允許Alice和Bob管理她/他的寵物。每個客戶端都是一個GUI,它將使用(內部發出HTTP請求)後端。問題:每個客戶如何才能對後端進行身份驗證?
假設HMAC(它完全是RESTful,沒有會話):這種方法涉及使用共享密鑰簽名有效載荷(從未通過線路發送)。是否每個客戶都有自己的tenant
表(其中包含shared_secret
字段)的副本?
Android App -> Client Sign -> Signed Request -> Backend -> Result
Web App -> Client Sign -> Signed Request -> Backend -> Result
問題2:又該資源URI的樣子?
這裏有方法可以得到Bob的寵物兩種可能性:
可能性#1:Authorization
頭給你租戶的(唯一的)名稱:
GET /pets HTTP/1.1
Host: www.example.org
Authorization: bob:c29kYW9kYSBhb2lzYWRoIGYgZDUzNDUz
可能性2#。該tenant_id
被作爲查詢參數:
GET /pets/tenant_id=1 HTTP/1.1
Host: www.example.org
Authorization: bob:c29kYW9kYSBhb2lzYWRoIGYgZDUzNDUz
使用短語multi-tenant時要小心。我不相信它意味着你的想法。在這裏看到細節http://msdn.microsoft.com/en-us/library/aa479086.aspx – 2013-03-04 19:23:45
@Gaz_Edge它意味着虛擬分區數據在客戶端和單個實例將服務更多的客戶,這就是我正在做的事情。你同意嗎? – gremo 2013-03-04 20:28:01
我覺得你太過於複雜了。您有1個Web服務,n個Web服務客戶端和x個用戶是? – 2013-03-04 22:28:02