2013-05-11 59 views
1

我已閱讀了許多有關使用REST服務進行身份驗證,授權等的討論。 我現在已經知道如何使用REST進行身份驗證/授權。使用REST服務訪問控制頁面

但是我沒有得到的東西是,如何使用REST服務控制對網頁的訪問。 這是一個很好的做法嗎?如果是這樣,怎麼樣?

示例:本地主機/服務

網頁
  • 根:的REST服務

    • localhost無/

    現在的網頁,該情況是:

    1.客戶端嘗試轉到頁面localhost/pages/join.html,但它無權訪問。

    2.因此,服務器應該檢查客戶端是否有權訪問該頁面,並且由於它沒有權限,應該將客戶端重定向到某個地方。

    我的問題不是服務器如何檢查,瞭解客戶是否有權利。

    但是,我想知道,何時以及如何使用REST服務進行此檢查和重定向。

    舉例來說,在我腦海中的,在join.html的身體,用<body onload>運行,檢查客戶端發送一個JSON消息REST服務的訪問權的JavaScript中的第一個想法,讓說,到localhost/services/access

    然後,服務將返回它的答案,如果確定,頁面將被加載,否則將被重定向到window.location.href。這是決定使用REST服務訪問網頁的權利的方式嗎?還有其他常見的解決方案/實踐嗎?

    請再次注意,我不問,如何保護我的REST API等,但

    如何檢查訪問權限,我的網頁與REST服務?

  • 回答

    2

    您可以發送從REST API接收的令牌,到web服務器,使它在瀏覽器客戶端的會話對象保存。

    1

    我認爲最好在服務器端進行anthorization和autentication,客戶端不安全,因爲你的代碼和邏輯完全暴露出來很容易僞造一個請求。

    通常,在服務器端,您可以使用攔截器攔截請求,在該攔截器中檢查用戶角色和他的訪問權限,然後決定是重定向請求(或發送403響應)還是發送正常的資源。

    攔截器的實現取決於你在服務器端使用哪種語言。

    例如,如果你用java(JAX-RS):http://docs.oracle.com/cd/E24329_01/web.1211/e24983/secure.htm#autoId0

    如果您使用的servlet,建立一個過濾器。

    如果使用struts2,攔截器是直接支持的。並通過使用Spring開發的應用程序,您可以使用AOP截取請求。

    如果您使用express.js,您可以構建處理auth邏輯的中間件。

    公司希望這些將幫助:)

    更新時間:

    請求流程是:獲得請求 - >檢索客戶端令牌(通常一個cookie) - >根據該發現用戶角色令牌 - >檢查角色是否可以訪問資源 - >服務器資源

    +1

    感謝您的回答。我知道REST服務並不適用於這種事情,對吧?所以,比方說,我使用了servlet過濾器,並且它位於另一個項目(.war)中,而不是我的REST服務。我如何理解用戶是否使用REST服務進行了身份驗證? (不使用數據庫)因爲儘管客戶端向REST服務發送了令牌,cookie或其他任何內容到Servlet,但Servlet無法檢查此令牌,因爲它沒有正確的令牌。那麼,我應該從Servlet中請求這個給我的REST服務嗎?這似乎不是一個好習慣,對吧? – 2013-05-12 10:19:18

    +0

    訪問控制應綁定到其餘服務服務器,請參閱我的更新答案。 – ltebean 2013-05-12 10:42:50

    +1

    但是我看不到的是:requeest是針對/pages/a.html製作的,這不是REST服務。我如何中斷並使用REST服務? – 2013-05-12 10:46:31