表单身份验证和授权MVC 4

Sha*_*har 7 c# asp.net-mvc-4 form-authentication

我正在尝试创建一个匿名控制器,以实现表单身份验证.我配置了启用了匿名和表单身份验证的IIS 7,并将我的web.config设置为拒绝匿名用户.在登录控制器上,我将[AllowAnonymous]装饰放在我的控制器上(以及我的操作).

我可以在这组配置上获得的唯一操作是登录操作(返回"登录"视图),我猜测MVC允许我获取此操作,因为我将其设置为我的Web上的登录URL的.config.

这是我的web配置配置:

     <authentication mode="Forms">
        <forms loginUrl="~/Login/Login" timeout="2880" />
     </authentication>
Run Code Online (Sandbox Code Playgroud)

所有其他操作都将重定向到登录操作.在这组配置中,我无法实现其他重要操作,如恢复密码,注册等.

我究竟做错了什么?

hVo*_*stt 15

在web.config中使用具有自定义行为的全局身份验证过滤器而不是授权配置(最适合MVC)

添加全局过滤器

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AuthorizeAttribute());
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,[AllowAnonymous]将起作用,所有其他控制器和操作都需要授权.


Kam*_*yar 12

您还可以AuthorizeRegisterGlobalFilters方法中注册过滤器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new AuthorizeAttribute());
} 
Run Code Online (Sandbox Code Playgroud)

然后使用AllowAnonymous需要匿名访问的操作方法的属性:

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult RecoverPassword()
    {
     ...
    }
}
Run Code Online (Sandbox Code Playgroud)