标签: forms-authentication

如何在重定向到login.aspx后保留url中的参数

我有以下路线:

{语言}/{控制器} .mvc/{动作}/{ID}

一旦用户选择了语言,它就会以路由值语言进行维护.

HTTP://本地主机:4000 /德/ Account.mvc /注册

如果用户点击需要修改的页面,我会遇到问题.然后他被重定向到http:// localhost:4000/Account.mvc/Login?ReturnUrl =%2fde%2fAccount.mvc%2fProfileData

登录页面在web.config中配置,不允许路由中的参数.登录后的页面正常(http:// localhost:4000/de/Account.mvc/ProfileData),但登录页面本身没有路由值语言.

我怎样才能解决这个问题?

编辑

我使用了Darin的答案,但必须包含原始Authorize过滤器(AuthorizeAttribute.cs)中的所有代码.原因记录在该文件中.它处理未经授权的用户可能从缓存中获取安全页面的情况.

以下是代码中的注释:

            // ** IMPORTANT **
            // Since we're performing authorization at the action level, the authorization code runs
            // after the output caching module. In the worst case this could allow an authorized user
            // to cause the page to be cached, then an unauthorized user would later be served the
            // cached page. We work around this by telling proxies …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc forms-authentication

2
推荐指数
1
解决办法
1899
查看次数

登录用户

我公司有一个很大的应用程序,我们正在完成.它利用WCF作为Active Directory的骨干进行身份验证.这适用于两个站点之一,因为身份验证模型是Windows,您必须成为域的一部分才能登录该站点.我的问题涉及外部可访问的其他站点.它为具有特定用户/传递的代理调用设置ClientCredentials.Windows.ClientCredential以模拟AD用户,因此完整的安全模型可以正常工作.这一切都完全符合预期.

我的问题是,在网上我可以使用HttpContext.Current.User.Identity.Name从Forms身份验证部分获取当前登录的用户,但要做到这一点,我必须确保存在一个System.Web引用我目前正在使用的DLL.我们的基础对象来自一个不了解System.Web的简单类.有没有办法找出在该基础对象项目中登录的Forms用户?我尝试过System.Security.Principal,但这只能让我从我能说的内容中访问Windows帐户,并且不会对我有任何帮助.

我知道一个选项只是引用System.Web并完成它,但这听起来真的很麻烦,而不是最好的选择,所以我希望在这里提供一些技巧.

c# security wcf forms-authentication

2
推荐指数
1
解决办法
2692
查看次数

表单身份验证Cookie过期

我有一个使用表单身份验证的ASP.NET Web应用程序.在web.config中,窗体身份验证超时值设置为"20"(我理解为20分钟).

我们正在看到一个问题,您将与该网站进行交互..(即点击链接按钮,执行回发等)并随机发送回登录页面进行身份验证.

似乎超时被遵守,但活动没有重新启动计数器.

任何想法在哪里查看或如何调试?

asp.net forms-authentication

2
推荐指数
1
解决办法
6703
查看次数

如何在ASP.NET MVC中禁用Action的安全性?

我的要求是只能从匿名用户访问登录页面和注册页面.我使用VS2008中的默认模板创建了一个新的ASP.NET MVC项目.

之后,我启用了将此部分添加到Web配置的安全性:

    <authorization>
        <deny users="?" />
    </authorization>
Run Code Online (Sandbox Code Playgroud)

现在,由于启用了安全性,因此无法再访问"注册操作".我如何才能禁用该Action的安全性?

谢谢

asp.net forms-authentication asp.net-mvc-2

2
推荐指数
1
解决办法
1612
查看次数

验证后为什么是假HttpContext.Current.Request.IsAuthenticated

我使用表单身份验证在我的网站上创建了一个登录,我不明白为什么在创建故障单并将其添加到cookie之后

如果我检查 HttpContext.Current.Request.IsAuthenticated

我弄错了.仅在连续请求时,用户才能进行身份验证

这是我的代码

var fat = new FormsAuthenticationTicket(
    1,
    username,
    DateTime.Now,
    DateTime.Now.AddMinutes(20),
    rememberMe,
    contact.Id + "," + contact.Role.Id,
    FormsAuthentication.FormsCookiePath);
HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat)));
Run Code Online (Sandbox Code Playgroud)

在这一点,如果我检查HttpContext.Current.Request.IsAuthenticated我得到假,我认为这一点用户被认证...

这是我的配置

<authentication mode="Forms">
    <forms loginUrl="/Admin/Login.aspx" name="FormAuthentication" />
</authentication>
<authorization>
    <deny users="?"/>
</authorization>
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# asp.net cookies forms-authentication

2
推荐指数
1
解决办法
2504
查看次数

在注册(表单身份验证)MVC3上添加用户角色

我正在开发一个MVC 3项目,并希望在注册时使用表单身份验证将用户添加到角色.因此,我想创建一些复选框,或者显示角色的下拉列表,这些列表已被选中,并且用户在注册时被分配给角色.

到目前为止我有这个代码,它有效:

    public ActionResult Register()
    {
        ViewData["roleName"] = new SelectList(Roles.GetAllRoles(), "roleName");
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,我有:

<label for="roleName">Select Role:</label>
@Html.DropDownList("roleName")
@Html.ValidationMessage("roleName")
Run Code Online (Sandbox Code Playgroud)

这是控制器的HttpPost部分,这是我不知道编码的部分:

    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model); …
Run Code Online (Sandbox Code Playgroud)

forms-authentication asp.net-mvc-3

2
推荐指数
1
解决办法
1万
查看次数

为什么在Fiddler中的请求中可见的cookie在Request.Cookies集合中不可用?

我正在使用相同的域但不同的子域在.NET 2.0站点和.NET 4.0站点之间进行SSO.在一台机器上的开发环境中一切正常,但我无法让4.0生产站点接受2.0生产站点生成的auth cookie.这两个站点位于不同的服务器上,一个运行IIS 6,只安装了2.0框架,另一个运行IIS 7.5,安装了4.0框架.我已经阅读了其他问题的所有其他答案,这些问题指出了<machineKey>元素和<authentication><forms>元素的问题,并且相信我,所有这些东西都已正确设置,并且所有4个站点都具有与这些元素完全相同的属性值.

起初我认为这是加密的一个问题,但是当我仔细研究Fiddler发生了什么时,我发现auth cookie正在请求中正确传递,但似乎在某些时候消失了,然后不是可在Request.Cookies集合中找到.

4.0生产站点位于负载均衡器后面,但Web场中当前没有其他服务器联机.负载均衡器能否以某种方式丢弃cookie?cookie是否未添加到Request.Cookies集合中,因为它不是有效的身份验证cookie?如果是这样,为什么它不合法?

总而言之,当我在请求的页面上执行以下操作时:

HttpCookie AuthCookie = Request.Cookies.Get(".SSOAUTH");

AuthCookie为null,即使我可以在Fiddler的请求标头中看到具有该名称的cookie.

asp.net forms-authentication .net-4.0 .net-2.0 single-sign-on

2
推荐指数
1
解决办法
1495
查看次数

在MVC3项目中进行表单身份验证,自动重定向

我正在研究一个MVC3项目,我必须添加一个登录机制.我必须使用这种<authentication>方法.我以为这会自动将用户重定向到登录页面?但什么都没发生.

我在我的web.config文件中有这个:

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

但我的登录控制器不会自动调用.我需要做些什么才能让它按照我想要的方式工作?

c# forms-authentication asp.net-mvc-3

2
推荐指数
1
解决办法
378
查看次数

如何为不由ASP.NET管理的cookie设置滑动到期时间?

我的ASP.NET应用程序管理两个cookie:由FormsAuthentication发布和管理的标准auth cookie,以及另一个允许使用非Windows/ASP.NET系统进行单点登录的cookie.

ASP.NET应用程序配置为通过web.config启用auth cookie的滑动过期:

<authentication mode="Forms">
    <!-- forms attributes removed for brevity -->
    <forms name=".ASPXAUTH" slidingExpiration="true" /> 
</authentication>
Run Code Online (Sandbox Code Playgroud)

不幸的是,滑动过期只会更改auth cookie而不是SSO cookie.是否有我可以订阅的事件,以便在auth cookie的到期时间延长时通知我?

或者,我是否可以通过拦截对应用程序的每个有效请求并手动扩展cookie来模拟此行为?如果是这样,我必须实施哪种方法来拦截任何控制器的此类请求?

c# asp.net cookies asp.net-mvc forms-authentication

2
推荐指数
1
解决办法
5585
查看次数

MVC5在web.config中放置身份验证表单的位置?

在这个标题之后,在我的web.config中,它由VS 2012生成.

现在,我不知道我把下面的代码放在web.config中我看到有人把它放进去<system.web>但是在我的web.config中它只有<system.web.webPages.razor><system.webServer>.当我把这个代码放在web.config中的某处时,我收到一个错误<authentication mode="Forms">:

有代码:

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

c# asp.net asp.net-mvc forms-authentication asp.net-mvc-5

2
推荐指数
1
解决办法
5350
查看次数