c# - MVC 和 WebAPI 网站中的身份验证

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

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

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

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

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

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

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

感谢您的指导。

最佳答案

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

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

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

关于c# - MVC 和 WebAPI 网站中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837834/

相关文章:

authentication - 在安全或自定义提供程序之前加载监听器

c# - RestSharp 响应不包含任何内容

c# - 如何从 C# 中的图形对象获取位图/图像?

C# 条码扫描器

c# - 数据层重构

c# - 为什么保存记录时Guid会改变?

c# - 将字符串拆分为 List<int> 忽略无 int 值

c# - 在后台运行异步操作方法

python - 登录并通过 if 显示菜单项

Azure应用程序服务身份验证 token 验证