MVC3-混合Windows和表单身份验证-自动登录-如何?
|
我已经实现了以下内容:
使用ASP.NET MVC进行Windows身份验证
背景
-这是一个Intranet应用程序,并使用Active Directory
-应用程序维护自己的用户列表(即网络登录名)和角色
-我有一个自定义的Membership和RoleProvider类,它们执行Membership.ValidateUser逻辑等。
-验证逻辑:
*如果用户(网络登录)在应用程序用户表中
他们已登录
*访问任何URL /操作后,如果尚未登录,请自动登录
*如果用户不在系统中,请将其重定向到\“ NoPermission \”页面
* [Authorize(Roles = \“ blah \”)]属性也被使用
这是控制器上的控制器OnAuthorize代码:
受保护的重写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);
}
}
}
这是我的Web.Config中的片段
<authentication mode=\"Forms\">
<forms loginUrl=\"~/Home/NoPermissionIndex\"
timeout=\"1\"
defaultUrl=\"~/Home/Index\"
/>
</authentication>
问题
除首次访问外,大多数功能都可以正常运行,用户已登录但仍被重定向到\“ NoPermission \”页面。此外,当会话/ cookie /票证(有什么区别,顺便说一句?)时,用户也被重定向到\“ NoPermission \”页面。
我从这里读
ASP.NET MVC HttpContext登录后获取IdentityName
可能的问题可能是由于请求中不存在身份验证cookie,并且我们必须在响应中发送它,以便客户端浏览器在后续调用中将其发送到请求中。
如果是这种情况,我该如何在首次访问时解决此问题?
其次,如何使cookie永不过期? (或者只是给超时一个很大的数字?还是其他解决方案?)
请帮助!
谢谢。
没有找到相关结果
已邀请:
0 个回复