azure - 最佳实践 : Calling separate Web-API Service from Single Page Application (SPA)

标签 azure controller cors single-page-application

大家好

我们正在围绕以下场景的架构进行讨论:

  • 单页应用程序(使用 ASP.NET WebAPI 的 JavaScript 驱动的 Html5 应用程序)
  • 将 REST 服务(仅限 WebAPI)与 BusinessLogic、DAL、DataBase-Connectivity 分开
  • Azure AD (ADAL) 的安全性

从单页应用程序调用 REST 服务的方式是什么?

目前我们正在寻找可能性:

1) 通过 CORS 直接从客户端(浏览器)调用 REST-Service:

客户端(浏览器)-> REST-服务

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

2) 从单页应用程序调用 WebAPI 服务,然后调用 REST 服务:

客户端(浏览器)-> WebAPI SPA -> REST-服务

对于第一个变体,我们看到一些安全问题。 一般这样做是不是就省事了? 如果 REST 服务位于内部网络而 SPA 位于 DMZ 中怎么办?

对于第二种变体,这里的最佳实践是什么?因为我们的 Controller 需要这样的东西:

SPA Controller 示例:

//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-Service (localhost:9472) Controller 示例:

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

-> 这是正确的方法吗?

感谢您的帮助!

亲切的问候, 彼得

最佳答案

我刚刚完成了一个大型企业风格的 SPA,几乎完全使用了您在选项 1 中描述的架构。

一般来说,让事情变得简单。更多的故障点只会增加维护、正常运行时间、可扩展性等方面的风险。如果您需要代理服务,请不要为了代理服务而引入它 - 您的服务将无法实现安全性较低。

您能解释一下您对选项 1 的安全担忧吗?希望我能为您减轻这些担忧?

-- 编辑--

我明白您关于 SPA 位于 DMZ 内且 RESTful 服务位于内部的观点,为了让您的 SPA 能够调用 RESTful 服务,您将需要一种将其公开给外界的方法。根据您已有的安全措施,可能只是将其移至 DMZ,否则您将需要在外部世界和内部休息服务之间进行代理。

关于azure - 最佳实践 : Calling separate Web-API Service from Single Page Application (SPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29392954/

相关文章:

php - CakePHP 获取表单值并检查数据库(如果存在)

javascript - CORS 与 Express.js 和 Angular2

nginx - 来自 nginx 的 422 状态代码的响应缺少 'Access-Control-Allow-Origin' header

c# - Azure Application Insights Analytics 查询联合和列比较

azure - 在azure中重新启动应用程序服务后出现500.30错误

Azure 存储迁移

unit-testing - Grails Controller 测试 - 动态方法的问题

javascript - 使用 AngularFire 简化 Angular Controller 发布到 Firebase

azure - 备份和还原 Azure 存储模拟器数据

asp.net - Signalr CORS 问题