对表单身份验证感到困惑

时间:2014-12-01 19:09:29

标签: c# asp.net-mvc authentication formsauthentication

我正在使用MVC创建个人项目,并且正在寻求实现身份验证功能。阅读一些书籍,在谷歌搜索,它出现"有很多方法可以正确地验证用户,包括:

  • 内置ASP.Net会员提供商 - 我想避免这种情况。
  • 使用Cookie
  • 自定义表单身份验证

我不知道为什么但是使用cookies似乎已经过时了,我的头脑会自动认为它不安全。我已将我正在阅读的一些文章与我联系起来。

我对使用自己的数据库进行身份验证的过程的基本了解如下:

  • 用户调用允许匿名访问(属性)的帐户控制器
  • 使用用户输入查询数据库(我使用实体框架)
  • 如果用户找到则FormsAuthentication.SetAuthCookie(用户名,false);否则显示错误。
  • 连接到FormsAuthentication.OnAuthenticate方法并执行类似下面代码项目文章中的类似操作:

代码:

protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
{
    if (FormsAuthentication.CookiesSupported == true)
    {
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {

            try
            {
                //let us take out the username now                
                string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
                string roles = string.Empty;

                using (userDbEntities entities = new userDbEntities())
                {
                    User user = entities.Users.SingleOrDefault(u => u.username == username);

                    roles = user.Roles;
                }
                //let us extract the roles from our own custom cookie


                //Let us set the Pricipal with our user specific details
                e.User = new System.Security.Principal.GenericPrincipal(
                  new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
            }
            catch (Exception)
            {
                //somehting went wrong
            }
        }
    }
}

注销:

formsauthentication.signout().

这是一种简单但安全认证的标准方式吗?我还没有太担心角色。如果我使用authorize属性或者我必须创建自己的属性,最后这将是上述工作。如果以上不正确或不安全,有人可以告诉我需要什么。我不想使用会员提供商数据库。我想用自己的数据库验证用户身份。

更新。稍微阅读后,我看起来还需要设置身份验证票证。虽然我不确定原因。

See the article on CodeProject

谢谢Gary我已经修好了链接。

1 个答案:

答案 0 :(得分:0)

认为网址已损坏,这是您尝试链接的正确文章

Artical