MVC3 - 混合Windows和表单身份验证 - 自动登录 - 如何?

时间:2011-06-24 23:38:20

标签: asp.net-mvc login forms-authentication windows-authentication

我实现了这样的事情: Windows Authentication with ASP.NET MVC

背景 - 这是一个Intranet应用程序并使用Active Directory - 应用程序维护自己的用户列表(即网络登录)和角色 - 我有一个自定义Membership和RoleProvider类,它们执行Membership.ValidateUser逻辑等。 - 验证逻辑:   *如果用户(网络登录)在应用程序用户表中     他们是签名   *访问任何URL /操作时,如果尚未自动登录,则自动登录   *如果用户不在系统中,则将其重定向到“NoPermission”页面   * [Authorize(Roles =“blah”)]属性也被使用

这是我的控制器上的控制器OnAuthorize代码:         protected override void OnAuthorization(AuthorizationContext authContext)         {

        if (!this.HttpContext.Current.User.Identity.IsAuthenticated) 
        {
            string networkLogin = HttpContext.Current.Request.LogonUserIdentity.Name;
            if (this.MembershipService.ValidateUser(networkLogin))
            {

                FormsAuthentication.SignIn(networkLogin, true); 
                base.OnAuthorization(authContext); 
            } 
        }
    }

这是我网站上的一个片段.Config

<authentication mode="Forms">
  <forms loginUrl="~/Home/NoPermissionIndex"
    timeout="1"
    defaultUrl="~/Home/Index"
  />
</authentication>

问题 大多数事情在首次访问时起作用,用户登录但仍然被重定向到“NoPermission”页面。此外,当会话/ cookie /票证(有什么区别,顺便说一句?)时,用户也被重定向到“NoPermission”页面。

我从这里读到 ASP.NET MVC HttpContext Getting IdentityName after LogOn 可能的问题可能是由于请求中不存在身份验证cookie,并且我们必须在响应中发送它,以便客户端浏览器将在后续调用的请求中发送它。

如果是这种情况,我如何在首次访问时解决此问题? 其次,我如何让cookie永不过期? (或者只是给超时一个非常大的数字?或者其他一些解决方案?)

请帮忙!

感谢。

0 个答案:

没有答案