簡體   English   中英

通過Backbone.js安全訪問經過身份驗證的REST服務器?

[英]Secure Access to Authenticated REST Server through Backbone.js?

我有這個REST服務器(由我自己編寫),它由簡單的HTTP身份驗證保護。

現在我使用backbone.js重新編寫應用程序,我不確定如何驗證我的客戶端。 如果我在JS用戶/傳遞中這樣做將是可見的。

那么我應該如何修改我的服務器或我的客戶端JS是安全的?

以前我只是給了用戶並通過PHP傳遞給REST服務器的每個請求,請指導我,謝謝。

HTTP基本身份驗證容易被竊聽和中間人攻擊。 建議使用HTTPS。

但是,如果這不是一個選項,您可以始終將cookie發送回客戶端並在其中輸入用戶名/密碼以防止它顯示在JS文件中。 不言而喻,出於安全原因,密碼至少應加密/散列。 然后,onus將在服務器端從cookie獲取身份驗證詳細信息。

現在,如果您對修改服務器端代碼沒有任何控制權,那么除了在全局ajaxSend()方法中ajaxSend()憑證詳細信息之外,您幾乎沒有任何選擇,該方法將在每個AJAX請求中發送用戶名/密碼詳細信息。 您可以將其放在其他.js文件中並使其難以找到,但您幾乎只限於這種安全形式。 雖然,餅干不會讓你的生活更安全。 (如果密碼經過哈希/加密,那就太好了)。

你可以做的另一件事是有一個稍微復雜的安全形式:讓服務器在每次響應時發回一個nonce - 服務器使用服務器的密鑰對nonce進行“簽名”,你可以使用它來'加密'每個請求在客戶端的用戶名/密碼。 然后,您的服務器必須不斷解密憑據。 這不太容易中間人,但仍然不是萬無一失。

如果它是您的選項,HTTPS將為您節省上述每一項。

希望這可以幫助。

更新 (根據評論) :restful-ness的本質是服務器上缺少狀態。 即,沒有會議! 因此,您需要使用客戶端對服務器的每個請求發送用戶憑據。 如果你有一個登錄頁面,那么很難真正做到安寧,因為沒有名為登錄的“資源”。 但是,這是你可以做的:

  1. 用戶訪問登錄頁面,輸入憑據並點擊“登錄”
  2. 使用這些憑據向服務器發送POST請求 - 可能是/ Login
  3. 讓服務器返回需要身份驗證的請求資源,並使用有效憑據設置cookie以在“下一個”請求中使用
  4. 每個后續請求都將通過特定操作(GET,PUT,POST,DELETE ...)定向到特定URL的相應​​資源。 服務器應檢查來自cookie的身份驗證數據,並確定用戶是否已通過身份驗證,並在必要時執行進一步授權以授予訪問權限。

每個請求必須在沒有服務器維持會話的情況下識別自己 - 這就是無國籍的精神(和寧靜;)

好的,我和我的同事討論過,並提出了迄今為止最好的想法:

在客戶端(站點)中創建一個簡單的控制器並將其命名為RESTAPI,它將作為實際REST服務器的包裝器。

當用戶登錄您的站點時,會創建他的會話。 RESTAPI控制器知道HTTP Authed實際REST服務器的憑據,並代表骨干網訪問REST服務器。

示例:如果我必須提取

/消息/發送

從REST服務器,現在我將在主干集合中點擊此URL

網站/ RESTAPI /消息/發

RESTAPI控制器還首先檢查請求用戶是否在站點上具有正確的會話,並且天氣是否允許他獲取資源。

所以不用擔心不安全的cookie或讓你的REST服務器通過普通的JS或使用任何其他模糊的方法:)

如果您可以訪問服務器端REST代碼,則可以重新設計REST身份驗證。 第一次,登錄時通過https發布用戶名/密碼,然后獲取會話ID,該會話ID可用於后續請求,將其作為cookie傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM