标签: forms-authentication

Asp.Net Mvc无法注销

这是我的代码登录

 var expire = DateTime.Now.AddDays(7);
        // Create a new ticket used for authentication
        var ticket = new FormsAuthenticationTicket(
        1, // Ticket version
        username, // Username to be associated with this ticket
        DateTime.Now, // Date/time issued
        expire, // Date/time to expire
        true, // "true" for a persistent user cookie (could be a checkbox on form)
        roles, // User-data (the roles from this user record in our database)
        FormsAuthentication.FormsCookiePath); // Path cookie is valid for

        // Hash the cookie for transport over …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc forms-authentication httphandler httpcontext

5
推荐指数
1
解决办法
8734
查看次数

ASP.NET:用户不会保持登录超过30分钟

这真的让我很恼火,可能会导致我网站上的用户减少.我正在使用表单身份验证来记录我的用户.

我在用户登录时默认将"Persist"参数设置为true:

RedirectFromLoginPage(userString, True)
Run Code Online (Sandbox Code Playgroud)

SetAuthCookie(userString, True)
Run Code Online (Sandbox Code Playgroud)

在我的web.Config文件中,我将"timeout"属性设置为"129600":

<authentication mode="Forms">
    <forms loginUrl="/registration/login.aspx"
    timeout="129600" slidingExpiration="true" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

我打电话给我的托管公司,他们说问题必须与我的代码有关.我不相信这种情况.

什么#(@%&@(#%&@(#*%可能是错的?

编辑这曾经很好地工作,直到我切换主机.这让我相信这不是我的代码,而实际上是主持人.

编辑2在回复使用Fiddler的评论时,这是我在加载页面时从Fiddler获得的内容:

Set-Cookie: .ASPXAUTH=; expires=Tue, 12-Oct-1999 07:00:00 GMT; path=/; HttpOnly
Set-Cookie: .ASPXAUTH=[some gobbledygook]; 
  expires=Sun, 15-Nov-2009 20:46:29 GMT; path=/; HttpOnly
Set-Cookie: ASP.NET_SessionId=vudqghfplqnh5hz1qw1cwebt; path=/; HttpOnly

asp.net forms-authentication login

5
推荐指数
1
解决办法
1745
查看次数

IE/IIS集成了身份验证问题

在IIS我有:

http://myserver/myapplication
http://myserver/reports

报告应用程序实际上是使用Windows身份验证的报告服务.myapplication是一个使用表单身份验证的asp.net应用程序.

服务器位于公司域之外.如果我首先访问报告并在提示时键入用户和密码(在服务器上创建的本地凭据),我可以访问报告页面,没有问题.如果那时我直接进入我的应用程序的登录页面并尝试登录,登录页面刷新而不做任何事情.这总是发生在IE 6中.在IE 7中,它会间歇性地发生.在Firefox中不会发生,或者Fiddler在后台运行,这似乎可以解决问题.

我使用wireshark查看发生了什么,发现IE 6将从报告应用程序获取的Windows身份验证令牌发送到myapp.这是IE和Firefox之间的唯一区别.IIS似乎吓坏了,只是将我的POST解释为登录页面作为GET并返回.

如果我在IIS中为myapplication添加Windows身份验证,那么任何浏览器似乎都能正常工作.

为什么会这样?IE中的错误或我错过了什么?

iis internet-explorer forms-authentication windows-authentication

5
推荐指数
1
解决办法
2952
查看次数

传递查询字符串时绕过表单身份验证

在ASP.Net中,如果传入特定的查询字符串参数,是否有人知道绕过表单身份验证的方法?

如:

mydomain.com/myprotectedpage.aspx
Run Code Online (Sandbox Code Playgroud)

...我希望受到表单身份验证的保护(因此,重定向到登录页面)

mydomain.com/myprotectedpage.aspx?myBypassParameter=me
Run Code Online (Sandbox Code Playgroud)

...我希望页面正常呈现

这是可能吗?

asp.net forms-authentication

5
推荐指数
1
解决办法
1895
查看次数

ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方式处理根URL

如果有以下内容web.config:

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms name="MembershipCookie" 
             loginUrl="Login.aspx" 
             protection="All" 
             timeout="525600" 
             slidingExpiration="true" 
             enableCrossAppRedirects="true" 
             path="/" />
    </authentication>
    <authorization>
      <deny users="?"  />
    </authorization>
  </system.web>
  <location path="Default.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

该应用程序是在Windows 2008R2/IIS7.5上运行的ASP.NET 2.0应用程序.

如果站点的应用程序池配置为运行ASP.NET 2.0并且我浏览到,http://example.comDefault.aspx按照您对上述规则的期望进行渲染.

但是,如果应用程序池设置为运行ASP.NET 4.0,则会将其重定向到登录页面.如果我明确指定http://example.com/default.aspx那么一切都很好并default.aspx呈现.

我尝试过重写/ -> /default.aspx(使用IIS UrlRewriter 2.0)但结果仍然相同,我被踢到了登录页面.

我也尝试使用具有相同结果的ASP.NET 4.0应用程序(这是问题最初出现的地方).我有一个2.0应用程序尝试这样做的原因是为了看看是否有行为上的变化,似乎/ 在4.0的处理方式不同.

总而言之,使用上面的配置可以观察到以下情况:

ASP.NET Version  Url                                 Behaviour
-------------------------------------------------------------------------
2.0              http://example.com                  Renders Default.aspx
2.0              http://example.com/Default.aspx     Renders Default.aspx
4.0              http://example.com                  Redirects to Login.aspx
4.0 …

asp.net forms-authentication asp.net-4.0

5
推荐指数
1
解决办法
3275
查看次数

IIS重置IIS后经过身份验证的用户

我正在构建一个.net Web应用程序并使用带有cookie的Forms身份验证来记住用户是否已登录:

<authentication mode="Forms">
  <forms timeout="4320" cookieless="UseCookies" loginUrl="~/account.aspx" name="test" slidingExpiration="true" /> 
</authentication>
Run Code Online (Sandbox Code Playgroud)

但是在构建,更改web.config或进行IIS重置之后,我加载的第一个页面显示我没有登录.但是如果我再次刷新页面然后显示我已登录,即使我没有任何东西.

所以它似乎记得我已登录,但只在第一页加载后.

这是通常的吗?我在web.config中是否有错误配置的内容?这只是一个localhost问题吗?

c# asp.net authentication cookies forms-authentication

5
推荐指数
1
解决办法
1283
查看次数

在多个服务器和子域上设置持久性表单身份验证

我正在尝试跨多个服务器和子域设置表单身份验证.我为每个应用程序设置了静态机器密钥,如下所示:

<system.web>
    <machineKey validationKey="574...7A7" 
                decryptionKey="2C3...A0D" 
                validation="HMACSHA256" 
                decryption="AES" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

...我的表单身份验证的配置与每个应用程序相同:

<forms loginUrl="/login" timeout="2880" defaultUrl="/" path="/" name=".SHAREDAUTH" domain="domain.com" protection="All" />
Run Code Online (Sandbox Code Playgroud)

我也试过在我的域名前加上一段时间,因为我看到有人建议,但这也不起作用.

这在我的本地计算机上运行正常,在IIS中为每个子域设置了单独的站点.它也适用于我们的开发服务器,所有站点仍然驻留在一台机器上.但是,当我部署到临时环境时,跨域身份验证将停止工作.在该环境中,我在单个服务器上运行主站点(发生登录的位置),在两个负载平衡的服务器上运行辅助站点(我的身份验证应该保留的位置).所有这些都在Windows 7(本地)或Server 2008 R2(开发和暂存)上的IIS 7下运行.

我通过在主站点上编码字符串MachineKey.Encode并在辅助服务器上解码结果来验证机器密钥是相同的,MachineKey.Decode.我还验证了.SHAREDAUTH cookie是通过检查请求传递给请求中的第二个应用程序的Firefox和Chrome报告的标题,并将调试器挂钩Application_BeginRequest,Application_AuthenticateRequest.我可以在Application_BeginRequest执行期间看到cookie ,但是在Application_AuthenticateRequest调用时它已经消失了.从我可以收集的内容来看,这似乎意味着身份验证票证的反序列化失败,但我无法弄清楚为什么在多服务器环境中可能发生这种情况,而不是单个服务器环境,除了不同的机器密钥,我已经证实并非如此.

我还设置了自定义MembershipProvider和RoleProvider,并且这些工作在每个站点上都可以独立工作.

我错过了什么?

.net c# forms-authentication web-farm

5
推荐指数
1
解决办法
3044
查看次数

保持用户登录 - FormsAuthentication

我正在努力解决这个问题.我正在使用FormAuthentication.当用户登录并且他们检查记住我时,我希望用户保持登录24小时.问题是,无论我做什么,用户都会在30分钟后自动注销.我们用户选择了记住我,我设置了一个持久性cookie,24小时后到期.我可以在浏览器选项中看到cookie,并且过期是正确的.如果我离开网站并回去说一个小时.用户已注销......他是我所拥有的一些代码片段.

bool IsValid = Membership.ValidateUser(LoginControl.UserName, LoginControl.Password);

if (IsValid)
{
    e.Authenticated = true;

    if (LoginControl.RememberMeSet)
    {
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(LoginControl.UserName, true, 1440); // 1 day
        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
        cookie.Expires = authTicket.Expiration;
        HttpContext.Current.Response.Cookies.Set(cookie);
        Response.Redirect(FormsAuthentication.GetRedirectUrl(LoginControl.UserName, true), true);
        FormsAuthentication.SetAuthCookie(LoginControl.UserName, true);
        FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, true);
    }
    else
    {
        FormsAuthentication.SetAuthCookie(LoginControl.UserName, false);
        FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, false);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的web.config

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login.aspx" defaultUrl="/" timeout="1" cookieless="UseCookies"  protection="All" slidingExpiration="true" ticketCompatibilityMode="Framework40"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)

当用户没有检查记住我时,我设置了一个非持久性cookie,并且在1分钟不活动后用户注销.这是正常的.问题是当设置了记住cookie并且用户返回时,即使存在cookie,用户也不再登录.

asp.net forms-authentication

5
推荐指数
1
解决办法
7781
查看次数

ServiceStack API和ASP MVC身份验证有两种方式

我在解决通过ServiceStack服务html页面和Web服务的ASP MVC应用程序的体系结构时遇到了麻烦.

该应用程序存在于基本URL中,例如" http://myapplication.com ",SS存在于" http://myapplication.com/api "中,因为它是配置两者的最简单方法.

总的来说一切正常,但是当我到达授权和身份验证的一部分时,我就被困住了.

首先,我需要应用程序处理cookie,因为ASP通常会执行FormsAuthentication,并且当使用属性"Authorize"时,用户将通过登录屏幕并使用操作和控制器.这是典型的ASP,所以我没有问题,例如" http://myapplication.com/PurchaseOrders ".

另一方面,我的应用程序的客户端将从javascript使用我的Web服务API.在某些情况下,还会使用ServiceStack的"Authenticate"属性标记这些Web服务.例如," http://myapplication.com/api/purchaseorders/25 "必须验证用户是否可以查看该特定采购订单,否则发送401 Unauthorized,以便javascript可以处理这些情况并显示错误消息.

最后但并非最不重要的是,另一组用户将使用任何外部应用程序(可能是Java或.NET)通过令牌使用我的API.因此,我需要解决两种类型的身份验证,一种使用用户名和密码,另一种使用令牌并使其持久化,因此一旦第一次进行身份验证,下一次调用就可以更快地从API中解决.

这是我到目前为止的代码,我已经非常简单地说明了这个例子.

    [HttpPost]
    public ActionResult Logon(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            JsonServiceClient client = new JsonServiceClient("http://myapplication.com/api/");
            var authRequest = new Auth { provider = CredentialsAuthProvider.Name, UserName = model.UserName, Password = model.Password, RememberMe = model.RememberMe };
            try
            {

                var loginResponse = client.Send(authRequest);

                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(loginResponse.UserName, false, 60);
                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                Response.Cookies.Add(cookie);

                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") …
Run Code Online (Sandbox Code Playgroud)

.net c# authentication forms-authentication servicestack

5
推荐指数
1
解决办法
1860
查看次数

基于OWIN为MVC 5中的多个Web应用程序设置表单身份验证

我正在建立我的第一个MVC Web App.我知道我需要提供基于表单的身份验证模型以及我知道我将重用它用于其他多个内部Web应用程序.

MVC 5身份验证的所有文档,我相信都是基于OWIN的东西,它使用EF Code First将其"烘焙"到单个Web应用程序中.

我正在尝试的是拥有另一个Web应用程序,除了帐户内容之外我将所有内容都删除,然后尝试"指向"我的网络应用程序身份验证,并让它返回"令牌",我猜,是我的身份验证用户和他/她的"角色".

我是在正确的轨道上吗?我是不是会因此而复杂化?我是Web开发的新手,但这似乎是一个相当合理和直接的要求.傻眼了,我无法在任何地方找到它.

.net asp.net-mvc forms-authentication asp.net-mvc-5 asp.net-identity

5
推荐指数
2
解决办法
7982
查看次数