2014-01-13 59 views
1

我認爲我們面臨的問題沒有解決方案,但爲了確認,我想在此處詢問。爲指定的客戶端提供一些REST API資源

我們有一個從消費REST API:

  • 管理網站(AngularJS)
  • 客戶網站(AngularJS)
  • 其他REST API客戶端(自己的API應用程序)

由於來自管理/客戶網站的請求是由AngularJS在客戶端進行的,用戶能夠確定(例如通過FireBug)資源URL並且能夠消耗所有這些資源從他們自己的應用程序 - 我們不想要的,我們不能限制它,例如與IP地址,因爲請求從客戶端。我們希望爲客戶/管理網站提供一些資源,併爲自己的REST API客戶端提供一些資源,併爲這兩種資源提供一些資源,但是從AngularJS提供的JS請求原理(以及資源​​URL可見性)不能完成( ?)。

這個問題的最佳做法是什麼?

+0

您是否可以將跨域請求限制爲僅適用於您自己的應用程序的url? –

+0

不需要。我們需要一個跨平臺和跨技術的解決方案:/ – user2148736

+1

僅在API層應用授權以允許/拒絕基於撥打電話的用戶的請求時出現什麼問題? –

回答

1

注意:您的REST資源應始終安全。你不應該依賴任何客戶端的JavaScript代碼。如果您的安全性被破壞,因爲某人知道 REST api的URI;東西是很錯誤

Angular可以做成模塊化,這樣客戶只能看到客戶模塊,管理員可以看到客戶和管理員模塊。這樣,您可以讓管理員在所見即所得的環境中播放,而不必在網站之間來回切換。

// Customers.js 
// Module only containing customer code 
angular.module('myCustomerProducts', ['myMainApp']); 

// Administrators.js 
// Module only containing administrator code 
angular.module('myEditCustomerProducts', ['myCustomerProducts', 'myMainApp']); 

由於您的網站已爲管理員和客戶分開,您只需包含和部署指定目標網站的JavaScript代碼即可。如果情況並非如此,則需要進行一些服務器端轉換(例如ASP.NET,PHP,Jade等),以根據用戶的憑據動態構建index.html。 根據主機平臺的不同,當從管理員網站(區域)請求任何內容時,您也可以拒絕訪問不在管理員組中的所有人。

但是,服務器端的安全性更有價值。您無法使用JavaScript保護不安全的服務器(在客戶端)。

+0

對不起,也許我在原始問題中沒有正確解釋它。我的問題不是如何保護我的REST API,我們面臨的問題是,如果請求來自客戶端網站或某個其他客戶端應用程序,我無法識別該問題。事實上,我需要解決ACL問題,併爲特定類型的用戶提供一些API資源。 – user2148736

+0

爲什麼這應該是一個安全問題?用戶不應該因爲他使用自定義REST客戶端而不是網站而擁有額外的服務器端權限。你有什麼樣的問題? – null

+0

不,這不是一個安全問題(由於用戶提供了有效憑證,因此他擁有訪問令牌),因此授權用戶。但是一些REST API資源不是爲另一個REST客戶端而不是爲網站設計的,我不想讓用戶在網站外面打電話給他們。事實上這不是一個安全問題。 – user2148736