2015-04-01 49 views
1

海蘭所有最佳實踐:調用從單頁應用(SPA)

我們有以下情形的架構圍繞討論單獨的Web-API服務:

  • 單頁應用(JavaScript的驅動的HTML5應用程序與ASP.NET的WebAPI)
  • 獨立REST服務(只的WebAPI)與BusinessLogic,DAL,數據庫連接
  • 安全超過天青AD(ADAL)

從單頁應用程序調用REST服務的方式是什麼?

在我們所看到的各種可能性的時刻:直接從客戶端(瀏覽器調用REST的服務通過CORS

1)):

客戶端(瀏覽器) - > REST的服務

...就像這個例子:https://github.com/AzureADSamples/SinglePageApp-WebAPI-AngularJS-DotNet

2)調用從單頁應用程序,然後調用REST的服務的的WebAPI-服務:

客戶端(瀏覽器) - > WebAPI SPA - > REST服務

對於第一個變體,我們看到一些安全問題。 這樣做一般會節省嗎? 如果REST服務位於內部網絡和DMZ中的SPA中,該怎麼辦?

對於第二個變體,這裏有什麼最佳實踐?因爲我們需要這樣的事情對我們的控制器:

SPA控制器示例:

//GET /api/Models 
public IQueryable<Model> Get() 
{ 
    // Create an HttpClient instance 
    var resp = client.GetAsync("http://localhost:9472/api/Models").Result; 
      var result = resp.Content.ReadAsAsync<IList<Model>>().Result.AsQueryable(); 
    return result; 
} 

REST服務(本地主機:9472)控制器示例:

//GET /api/Models 
public IQueryable<Model> Get(){ 
    return _repository.GetAllModels(); 
} 

- >這是正確的方式去做吧?

感謝您的幫助!

親切的問候,彼得

回答

0

我曾嘗試使用剛剛完成的大型企業風格SPA,近,正是你在選項1

描述架構一般來說讓事情變得簡單。更多的失敗點只會增加維護,正常運行時間,可擴展性等方面的風險。如果您不需要需要代理服務不會爲此推出它 - 您的服務不會不那麼安全。

你能解釋一下你對安全問題的選擇1,希望我可以爲你減輕它們嗎?

- 編輯 -

我看到SPA是在DMZ和RESTful服務中存在的內部,爲您的SPA能夠調用REST式服務,您將需要一種方式來揭露這對你的觀點外面的世界。取決於您已經擁有的安全性,可以將其移入DMZ,否則您需要在外部世界和您的內部休息服務之間進行代理。

+0

感謝您的回答。我們決定使用第一種情況,因爲我們有DMZ,所以我們需要中間代理。我發佈了關於驗證的後續問題 - > http://stackoverflow.com/questions/29511094/howto-call-from-spa-angularjs-based-azure-ad-protected-to-webapi-webapi- ONL – 2015-04-08 09:42:26