标签: forms-authentication

RoleManagerModule和RolePrincipal对象

根据我的书,如果启用了角色管理,则RoleManagerModule通过将RolePrincipal对象分配给用户来创建用户的安全上下文HttpRequest.User.但是,是否已经创建了安全上下文(因此主要对象被分配HttpContext.User)FormsAuthenticationModule,在被调用之前RoleManagerModule调用它?

我问这个,因为在下面的代码中,主要对象HttpRequest.User已分配给已存在,即使RoleManagerModule尚未被调用:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated && Roles.Enabled)
    {
        //here we subscribe user to a role via Roles.AddUserToRole()
    }       
}
Run Code Online (Sandbox Code Playgroud)

主要对象是由对象(由创建者)创建FormsAuthenticationModule和分配给HttpRequest.User后来替换的?RolePrincipalRoleManagerModule

c# asp.net authentication forms-authentication roles

3
推荐指数
1
解决办法
2192
查看次数

Membership.GetUser().ProviderUserKey始终返回null

我最近开始使用ASP.NET Forms Authentication和Membership.

我在Visual Studio中创建了一个C#项目,它自动创建了像"/Account/Login.aspx"这样的页面.

然后我按照一个示例将aspnet_*表安装到我的SQL Server数据库,并且我已经能够使用该<asp:CreateUserWizardStep>控件来创建用户.

我之后能够以此用户身份登录,并在调用时显示登录的用户名 <asp:LoginName>

但是,当我在C#代码中调用以下内容时,在Button Click事件处理程序中,我总是得到一个Null引用异常:

string UserID = Membership.GetUser().ProviderUserKey.ToString();
Run Code Online (Sandbox Code Playgroud)

这不应该UserID从我的aspnet_users表中返回吗?

如果<asp:LoginName>显示UserName值,我不应该总是能够调用Membership.GetUser().ProviderUserKey

c# asp.net forms-authentication asp.net-membership

3
推荐指数
1
解决办法
8373
查看次数

防止表单身份验证在localhost上的Web应用程序之间"溢出"

我现在在业余时间在几个ASP.Net MVC项目之间交替,我注意到它们之间的表单身份验证"溢出".即我做一些工作来投射并登录以测试一些功能.然后我切换到项目b,当我启动时,我已经登录,因为项目的登录仍然被浏览器和我的本地IIS Express记住.

有什么办法可以防止这种情况发生吗?

asp.net forms-authentication

3
推荐指数
1
解决办法
341
查看次数

WIF不适用于ASP.NET MVC 4

我有Windows Identity Foundation与MVC 3配合良好.但是,在MVC 4中,似乎WIF没有机会处理未授权的响应并重定向到STS - 而是我被重定向到login.aspx,这是很好的老表格认证.

在MVC 3中,我曾经在web.config中禁用表单auth,但它在MVC 4中不起作用.

我知道MVC 4中的身份验证和授权已经发生了变化,但是我的Google技能似乎已经让我感到厌烦,而且我似乎无法找到如何阻止表单身份验证干扰.有什么指针吗?

asp.net-mvc forms-authentication wif asp.net-mvc-4

3
推荐指数
1
解决办法
1198
查看次数

HttpContext.User.Identity.IsAuthenticated永远不会是真的

登录

[HttpPost]
public ActionResult Login(LoginModel loginModel)
{
    if (ModelState.IsValid)
    {
        using (var _Db = new AccountContext())
        {
            var _UserAccount = _Db.UserAccounts.FirstOrDefault(u => u.Username == loginModel.Username && u.Password == loginModel.Password);

            if (_UserAccount == null)
            {
                ModelState.AddModelError("", "Account doesn't exist!");
            }
            else
            {
                FormsAuthentication.SetAuthCookie(loginModel.Username, false);
            }
        }
    }
    return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)

重定向或显示视图

public ActionResult Index()
{
    if (HttpContext.User.Identity.IsAuthenticated)
    {
        return View("Index");
    }
    else
    {
        return RedirectToAction("LoginPage");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了代码,可以看到使用正确的用户名调用SetAuthCookie. FormsAuthentication.SetAuthCookie(loginModel.Username, false);

什么可以阻止用户进行身份验证?

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

3
推荐指数
1
解决办法
6894
查看次数

身份验证不适用于发布

在我的本地机器上我的表单身份验证工作正常,我可以使用服务器中保存的详细信息登录.如果我输入的密码错误,我没有登录,与用户名相同.

当我发布网站时,只要ModelState正确,我就可以使用任何细节登录.我不明白为什么在本地计算机上我的服务器会有不同的行为.

我正在使用相同的数据库,因此不能成为问题.当我发布项目时,就好像我的登录模型被完全忽略了一样.

知道为什么会这样吗?我是否需要在web.config中添加一些内容才能在我的服务器上运行?奇怪的是,这在过去的几个月里一直运作良好.

asp.net asp.net-mvc forms-authentication asp.net-mvc-4

3
推荐指数
1
解决办法
1112
查看次数

MVC4表单身份验证+ AJAX操作

在我的ASP.NET MVC4应用程序中,我正在使用表单身份验证.应用程序中的一个视图需要通过jQuery post()调用获取一些字符串数据.我写了一个返回字符串的动作.一切正常,直到表单身份验证票证到期.到期后,对字符串操作的AJAX调用导致以下结果:

  • 操作中的代码不会被执行
  • 该操作返回HTTP 200而不是401
  • 该操作以字符串形式返回Login视图的HTML
  • 因为返回了200状态而不是401,所以控制结束jqXHR.done()而不是jqXHR.fail()

这是预期的行为吗?我能做些什么来让动作返回401吗?或者我还应该做些什么来处理这个问题?

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

3
推荐指数
1
解决办法
1758
查看次数

ASP.net MVC FormsAuthentication cookie丢失

我正在使用FormsAuthentication编写ASP.net MVC 5应用程序.我把所有东西都搞定了并正常使用FormsAuthentication.SetAuthCookie(user.Email, model.RememberMe).

但是,我想创建一个自定义票证,以便我可以在票证的UserData字段中存储一些额外的信息.这就是我创建票证并将其存储在cookie中的方式:

var ticket = new FormsAuthenticationTicket(1, user.Email, DateTime.Now, DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes), model.RememberMe, user.AuthToken);
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Domain = FormsAuthentication.CookieDomain, Path = FormsAuthentication.FormsCookiePath, HttpOnly = true, Secure = FormsAuthentication.RequireSSL };
HttpContext.Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)

这会创建一个加密的票证并将其发送到浏览器.我已经使用开发人员工具和Fiddler验证了该票证是否存在于浏览器中,并且在后续请求中将其发送回服务器.

但身份验证现在已被破坏.此外,cookie不可用于Application_AuthenticateRequestApplication_PostAuthenticateRequest事件中.当我使用调试器进行探索时,Context.Request.Cookies它不在列表中.

奇怪的是,如果我退回管道并检查它,cookie确实存在Application_BeginRequest:

void Application_BeginRequest(object sender, EventArgs e)
{
    // Auth cookie exists in the collection here! Ticket decrypts successfully
    HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie == null)
        return;
    var …
Run Code Online (Sandbox Code Playgroud)

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

3
推荐指数
1
解决办法
6425
查看次数

在表单身份验证中使用ASP.Net Identity 2 cookie

我有一个Owin Identity应用程序和另一个在虚拟目录中设置的应用程序.虚拟应用程序使用传统的表单身份验证进行设置,并且两个Web.configs都具有相同的<machineKey>设置.我可以使用Identity应用程序登录,并可以看到生成的cookie.但是,当我尝试访问虚拟应用程序时,它说我没有通过身份验证.

在Identity应用程序中,我有以下设置:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
  AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
  LoginPath = new PathString("/login.aspx"),
  Provider = new CookieAuthenticationProvider
  {
    // Enables the application to validate the security stamp when the user logs in.
    // This is a security feature which is used when you change a password or add an external login to your account.  
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30),
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
  }
});
Run Code Online (Sandbox Code Playgroud)

在虚拟应用程序中,我的授权设置如下:

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

是否有任何指针让虚拟应用程序识别Identity设置的cookie?

asp.net forms-authentication owin asp.net-identity

3
推荐指数
1
解决办法
3471
查看次数

是否可以更新FormsAuthentication cookie值?

我必须在登录时设置FormsAuthenticationcookie值(FormsAuthentication.SetAuthCookie(UserDesignation, false)).现在我需要提供指定更改选项.因此,当用户更改其名称时,我需要将FormsAuthenticationcookie值从旧指定更新为新指定.

有可能吗?

如果是的话,我该怎么做?

cookies asp.net-mvc forms-authentication setcookie formsauthentication

3
推荐指数
1
解决办法
2847
查看次数