Asp.net窗体身份验证登录循环

Asp.net窗体身份验证登录循环,asp.net,webforms,forms-authentication,cookieless,Asp.net,Webforms,Forms Authentication,Cookieless,当您使用无cookieless会话且无法将login.aspx的名称更改为httphandler时,如何解决无限登录循环问题 i、 e.当具有管理员权限的用户点击“注销”按钮并将返回到受限页面的url传递到login.aspx时,另一个没有管理员权限的用户尝试登录,他们会被重定向回登录页面 我遇到过这种情况,但我无法将login.aspx的名称更改为http处理程序,并且isauthenticated函数在带有cookieless auth的aspx页面中似乎不起作用,因为表单验证票证在重定向回

当您使用无cookieless会话且无法将login.aspx的名称更改为httphandler时,如何解决无限登录循环问题

i、 e.当具有管理员权限的用户点击“注销”按钮并将返回到受限页面的url传递到login.aspx时,另一个没有管理员权限的用户尝试登录,他们会被重定向回登录页面

我遇到过这种情况,但我无法将login.aspx的名称更改为http处理程序,并且isauthenticated函数在带有cookieless auth的aspx页面中似乎不起作用,因为表单验证票证在重定向回登录页面时似乎从url中剥离

编辑:


由于此应用程序已投入生产,我无法更改登录/注销/超时过程的页面流或重命名登录页面。

您可以更改页面流吗

我的意思是,当用户无法访问资源时,与其重定向回login.aspx页面,不如将其重定向到信息页面

本页解释重定向的原因,并为他们提供如下选项:

1. Click here to login as another user.
2. Click here to request access to the page.
3. Click here to login again, if your session has expired.
这将删除循环引用,从而消除问题。

一些选项

第一,当用户注销时,手动重定向回Login.aspx,这样就没有返回URL。在您的页面上进行与会话超时匹配的元刷新,这样用户就不会单击突然无法访问的资源

第二,总是在Login.aspx的页面上注销某人。嘿,为什么不呢?我能想到一些原因,但也许它们不适用于你的情况


第三,忽略返回URL。您不必调用RedirectFromLoginPage!登录时将用户重定向到默认登录页。

我们遇到了类似的问题,我通过以下操作修复了该问题:

If "LogOut".Equals(e.CommandName) Then
    FormsAuthentication.SignOut()
    Response.Redirect("~/Login.aspx")
End If

然后在Login.aspx中,如果PostBackUrl包含返回URL参数,将用户发送回Login.aspx,我们将其更改为Login.aspx。

在登录Login.aspx页面后,检查用户是否有权访问返回URL中的页面。您可以使用UrlAuthorizationModule的此方法(如果最适合您,也可以使用自定义方法):

如果用户未经授权,只需重定向到用户可以访问的页面

要获取用户主体,请执行以下操作:

var roles = System.Web.Security.Roles.GetRolesForUser(username);

var principal = new System.Security.Principal.GenericPrincipal(

   new System.Security.Principal.GenericIdentity(username), 

   roles

);

添加一个http模块,检查Request.urlReferer是否是登录页面,如果是,则检查他们是否有权访问Request.Url,如果没有,则将他们重定向到“You not authorized to view this page.”页面。

尽管您说您不能将login.aspx的名称更改为http处理程序,您是否尝试过添加HTTP 301重定向,以便每当请求login.aspx时,服务器都会将用户重定向到HTTP处理程序,例如login.ashx?

不幸的是,应用程序已经投入生产,我无法更改登录过程,我真的需要它是透明的。我认为你可能需要对应用程序进行更根本的更改。您是否无法在问题已解决的情况下发布此版本的新版本(即通过使用httphandler解决方案)?Hi Leandro,这是一个很好的建议,但它仅在用户单击注销按钮时起作用,如果用户会话超时,它仍会将当前URL作为returnurl参数传递。然后,删除Login.aspx的表单回发URL中的ReturnUrl参数如果ReturnUrl包含Login.aspx.Hi Freddy,这是一个好主意,除非我认为在表单票证插入URL之前,您无法访问经过身份验证的genericprincipal对象。如何在登录页面中获取经过身份验证的主体对象?我进行了编辑并添加了示例代码以获取GenericEntity。我在一个方面同意其他人的观点:如果不能修改任何内容,如何修复此问题?您是否正在寻找一种只修改web.config文件而不修改其他文件的解决方案?我真的认为这是不可能的
var roles = System.Web.Security.Roles.GetRolesForUser(username);

var principal = new System.Security.Principal.GenericPrincipal(

   new System.Security.Principal.GenericIdentity(username), 

   roles

);