【问题标题】:AuthoriseAttribute with Web API in existing MVC ApplicationAuthoriseAttribute 与现有 MVC 应用程序中的 Web API
【发布时间】:2014-01-17 10:13:42
【问题描述】:

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

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

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

但是,在我的 API 控制器中添加了 Http 版本的授权属性,并在我的 Mvc 控制器中保留了授权属性的 Mvc 版本后,我对 API 的请求现在总是返回 401 - 未经授权,即使在登录时也是如此.

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

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

我在这里做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

    为了解决这个问题,我已将请求移至对文档就绪的 JQuery ajax 调用,我一开始就应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2014-11-21
      相关资源
      最近更新 更多