认证在MVC& WebAPI网站

时间:2014-02-17 19:37:30

标签: c# asp.net-mvc authentication forms-authentication basic-authentication

我有一个使用简单表单身份验证的网站,使用数据库验证凭据。它工作得很好。在 web.config 中的<system.web>我有:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>  

我现在需要向站点添加一个小型WebApi Controller,以便应用程序从中提取对象列表。看来,就WebApi身份验证而言,基本身份验证就没问题了。我将在应用程序中拥有用户凭据,这些凭据可以轻松传递,并在请求标头中进行编码。

我的问题是区分MVC和WebApi身份验证。首先,我的解决方案是一个好主意,并且易于实现?目前,在WebApiConfig.cs我有:

GlobalConfiguration.Configuration.MessageHandlers.Add(new BasicAuthenticationHandler(new AuthenticationService()));

BasicAuthenticationHandler查找标头中的凭据。但是,通过MVC表单身份验证,我根本无法访问该区域。当我在fiddler中点击动作时,我可以看到它直接重定向到MVC帐户/登录页面。如何避免重定向我的WebAPI调用?

感谢您提供任何指导。

1 个答案:

答案 0 :(得分:1)

好吧,看起来这是一个简单的修复。我上面的 web.config 代码之后的直接行看起来像:

  <authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
  </authentication>
  <authorization>
    <deny users="?" />
  </authorization>

看起来authorization元素完全覆盖了我所拥有的任何[AllowAnonymous] - 唯一可能的匿名方法是登录页面。删除这3行完全解决了我的问题 - 我现在使用[AllowAnonymous]属性作为我的WebAPI页面,它正确地应用了基本身份验证。