如何在MVC 5应用程序和单独的Web API应用程序中实现身份验证

时间:2015-02-07 21:10:58

标签: security authentication asp.net-mvc-5 asp.net-web-api2 owin

我正在使用前端的AngularJS构建在线应用程序,托管在MVC 5 / Web API应用程序(基本上是单页面应用程序)中。但是我有一个严格的限制:应用程序的数据将保存在专用网络中。我必须在专用网络中构建第二个Web API应用程序,以暴露Web应用程序的功能。此外,用户身份验证需要在专用网络API内部进行(因此专用网络API将充当身份验证提供程序),因为这是用户表所在的位置。

DMZ中的应用程序基本上将充当专用网络中Web API的代理。因此,在UI API中的ApiController中收到的每个请求都将调用专用网络API,理想情况下在初始请求中传递已接收的令牌。

从身份验证的角度来看,这就是我需要的:

  • 用户导航到该站点,只能看到某些页面(我想在视图控制器中使用MVC过滤器来控制访问)。
  • 他们将使用用户名和密码登录一次。
  • 登录后,用户可以导航到应用程序页面,因此页面将调用DMZ API获取数据。
  • 此DMZ的API控制器将调用专用网络API。
  • 两个API都可以根据用户的凭据识别和应用其控制器方法的授权。

如果我不需要第二层API,我只会使用MVC单用户身份验证实现,它提供对cookie(UI)和令牌(API)身份验证的支持。

任何有助于深入了解我如何通过上述方案做类似事情的帮助将非常感激。 (我想我的要求有点像UI网络应用程序的Windows模拟。)

请参阅下面的静态架构的高级视图:

enter image description here

1 个答案:

答案 0 :(得分:0)

您可能需要查看Azure service bus relays,它们旨在桥接公司防火墙并调用内部部署API。

您的WebAPI服务将通过服务总线进行身份验证,以便通过它来调用您的服务。您可以在请求中使用承载令牌传递用户凭据。

我不确定,但您可能需要更改后端服务实现以使用WCF。您可以在this link中找到有关在Microsoft Dynamics中使用中继的说明。