我有一个现有的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授权属性。
我在这里做错了什么?
答案 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调用上,我应该首先完成它。