在现有MVC应用程序中使用Web API的AuthoriseAttribute

时间:2014-01-17 10:13:42

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api authorization

我有一个现有的MVC应用程序,其自定义授权属性会覆盖System.Web.Mvc.AuthorizeAttribute

我现在需要将Web API添加到项目中,但只允许访问授权用户。 如果我将自定义authorize属性添加到API控制器,它似乎会被忽略并允许任何人不受限制地访问。

经过一些reading后,我发现要授权用户使用Web API,您必须使用System.Web.Http.AuthorizeAttribute版本的authorize属性。

然而,在将我的API控制器的Http版本的authorize属性添加到我的Mvc控制器之后,我对API的请求现在总是返回401 - 未经授权,即使在登录时也是如此

然后我尝试删除我的自定义[Mvc]授权属性并使用标准版本而得到相同的问题。

This question描述了一个类似的问题,并尝试通过合并两个名称空间中的类来解决它。这听起来不是一个很好的解决方案,因为我真的不需要自定义API授权属性。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

如果MVC应用程序与Web API位于同一项目中,则只能与MVC基本身份验证共享授权。 如果没有,那么您必须在Web API中创建CustomAuthorize属性(继承http.AuthorizeAttribute)并在WebAPI上实现基本身份验证。 这样,对WebAPI的每个请求都应传递userName并传入HTTP Request的AuthHeader

答案 1 :(得分:0)

我认为问题在于我试图在服务器端代码中调用API。 (不要问,我知道这听起来不合逻辑。)

显然,服务器端请求不会冒充用户凭据。 我尝试在web.config中设置<Identity Impersonate="true"/>,但这没有效果。

为了解决这个问题,我已经将请求转移到文档就绪的JQuery ajax调用上,我应该首先完成它。