我实现了这样的事情: 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永不过期? (或者只是给超时一个非常大的数字?或者其他一些解决方案?)
请帮忙!
感谢。