2012-06-23 102 views
2

我正在創建一個JavaScript客戶端系統,它將通過REST(HTTP)[JSON]與服務器進行通信。使用REST(HTTP)進行基於角色的訪問控制?

我使用role-based access control來管理呼叫。

:明確的URL將保持不變]

  • 匿名 - >請求\
  • 服務器 - >航線登錄形式:(!現在的cookie)\login\
  • 用戶 - >要求\
    • if (user->role == "manager") return "\manager-homepage\";
    • else return "\homepage\";

由於REST是無國籍我將如何去管理這個用例?

我是否會向每個請求發送cookie,並且返回的HTTP狀態代碼會告訴JS要在哪裏路由?

[這將是相當低效+開放MITM攻擊]

+0

題目是錯誤的,訪問控制是授權,你在談論身份驗證... – inf3rno

回答

1

你不能用一個標準的認證方案,如http digest

:從維基百科頁面]

  • 的客戶端請求需要身份驗證,但不提供用戶名和密碼的頁面。通常這是因爲用戶只是簡單地輸入了地址或者跟隨了該頁面的鏈接。
  • 服務器響應401「客戶端錯誤」響應代碼,提供認證領域和隨機生成的一次性值,稱爲隨機數。
  • 此時,瀏覽器會向用戶呈現身份驗證領域(通常是正在訪問的計算機或系統的描述)並提示輸入用戶名和密碼。用戶可能決定在這一點上取消。
  • 一旦提供了用戶名和密碼,客戶端將重新發送相同的請求,但會添加包含響應代碼的驗證標頭。
  • 在此示例中,服務器接受認證並返回頁面。如果用戶名無效和/或密碼不正確,服務器可能會返回「401」響應碼,客戶端將再次提示用戶。

注意:客戶端可能已經具有所需的用戶名和密碼而不需要提示用戶,例如,如果他們以前被網頁瀏覽器存儲過。

也看到這個答案,以一個非常類似的問題:REST and authentication variants

根據您所需的安全級別,你可以成爲整個事情通過SSL。這將防止mitm攻擊。

+0

感謝你,不知道該RFC。我修改了你的答案,包括方法論,你能接受我的編輯嗎? – user1438003

+0

好,接受爲答案:) – user1438003