2013-01-22 44 views
1

我正在開發一個Web應用程序。前端只通過RESTful API(它被稱爲SOA架構)與後端交互,而後端僅通過JSON將數據發送到前端。用於自動化的RESTful API,計劃功能控制

我的問題是: 1)通過RESTful API設計授權是否是最佳實踐?或者最好在後端代碼檢查授權(用戶 - >角色 - >特權)? 例如:在執行其他API之前,我們是否每次都詢問用戶/ checkPrivilege/{...}?

2)通常如何實現3個具有不同功能的計劃& RESTful API中的UI? 例如:我們是否使用API​​來限制這個計劃的5個用戶?或者我們在後臺代碼中執行它?

+0

URL'/ checkPrivilege/{...}'表明您的API可能不像您想象的那樣RESTful。請記住:您的網址看起來不像方法調用。一個URL應該標識一個資源。 –

+0

你說得對。我如何設計授權服務?我應該在RESTful API中執行它嗎?或在後端? –

回答

1

這是一個古老的問題,但無論如何我會回答這個問題,以防萬一出現。

簡短的答案是你通過後端做到這一點。您請求的URI不應包含有關用戶的任何信息。任何會話/標識數據都應該在HTTP標題中發送。

您的RESTful API總是要通過像index.php這樣的前端控制器加載。在執行代碼的其餘部分之前,您將需要引導授權工具來檢查每個頁面的憑證請求。

這些憑證在MINIMUM處應該包含一個唯一的授權令牌,用於發出請求的用戶,並且此令牌需要在每個請求中發送(我再次推薦通過HTTP標頭)。如果您授予將會過期的臨時訪問令牌,則可以獲得獎勵積分,以防止在以後未經授權的訪問。

但是爲了簡單起見,假設您只是爲每個用戶使用一個永久唯一的令牌。然後,您將存儲此令牌以及有關該用戶的所有其他數據,其他數據應包含該用戶所屬帳戶的account_id。

所以每個請求您可以:

  1. 抓住從HTTP頭
  2. 用戶令牌查找基於該令牌用戶。
  3. 如果找到用戶,然後用自己的ACCOUNT_ID查找主賬戶的個人賬戶與
  4. 相關如果匹配,授予他們訪問

但是請記住,您的網址應該不會包含此信息無論如何。 REST風格的URL是無狀態的。