【发布时间】:2014-07-10 13:37:52
【问题描述】:
我正在寻找一种使用 Web Api(2) 和 Asp.net MVC(5) 来实现 Intranet Web 应用程序的好方法。 应用程序的设计方式是,我们在客户端使用 AngularJS SPA,在服务器端 MVC 中使用 Web Api 作为单个应用程序/网站。 MVC 是因为我们必须根据安全权限来限制操作。如果用户没有权限,当我们为视图调用 MVC 控制器时,我们不会渲染操作按钮(例如,保存、删除等)。其他操作是利用 Web API 方法来保存、删除等,
基本思路是
MVC 控制器用于在用户没有权限的情况下生成删除操作按钮的视图(AngularJS 的 html 模板)。 数据操作是通过 Web API(AngularJS $http 服务 web api 调用)
这里有问题
我们如何派生一种可用于 MVC 和 Web API 的身份验证机制? (我们可以创建身份验证过滤器,但我们必须为 MVC 和 Web API 创建单独的过滤器,对吧?)
一旦用户通过身份验证,我们如何与 MVC 控制器和 Web Api 控制器共享此信息,而不是验证用户来自 Angular js 的每个请求?
是否可以对 MVC 和 WebApi 使用 ASP.Net 表单身份验证进行身份验证?如果是这样,我们该怎么做?是否会使用 [authorize] 属性自动为 MVC 控制器和 Web Api 控制器验证表单身份验证令牌?
我还想知道,在单个应用程序中混合 MVC 和 WebApi 是一种好方法吗?
【问题讨论】:
-
所以您不想使用内置身份验证(例如,身份与帐户/角色然后使用
AuthorizeAttribute)? -
是的,我们可以,但我们需要为 MVC 和 Web API 分别处理它,对吧?
-
您的 Web API 是否位于与 MVC 网站不同的服务器/项目中?
-
Web API 和 MVC 在单个应用程序中
-
如果它们在同一个应用程序中,它们已经共享相同的上下文(Http/Owin)并且可以通过相同的方式进行身份验证。授权过滤器位于 Mvc/WebApi 的不同命名空间中,但它们的工作方式相同。在任何情况下,您都可以创建自己的授权过滤器并实现 MVC 和 WebApi 的接口(System.Web.Mvc 和 System.Web.Http.Filters 中的 IAuthorizationFilter)来集中您的自定义逻辑。
标签: asp.net asp.net-mvc angularjs asp.net-web-api