关于身份验证:在ASP.NET中使用没有登录控件的自定义MembershipProvider

关于身份验证:在ASP.NET中使用没有登录控件的自定义MembershipProvider

Using Custom MembershipProvider without a Login control in ASP.NET

我们在ASP.NET中有一个自定义的MembershipProvider。现在有两种可能的情况可以验证用户:

  • 通过login.aspx页面输入用户名/密码登录。我已经使用了登录控件并将其与MyMembershipProvider链接。这工作得很好。

  • 身份验证令牌通过查询URL中的某些URL从其他网站传递。为此,我在MembershipProvider.Validate(string authenticationToken)中有一个重载,它实际上是在验证用户。在这种情况下,我们不能使用登录控件。现在,如何在不实际使用登录控件的情况下使用相同的MembershipProvider来验证用户?我尝试手动调用Validate,但这未使用户登录。

  • 这是我正在使用的代码段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
        string ticket = Request.QueryString["authenticationToken"];
        MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
        if (provider != null) {
            if (provider.ValidateUser(ticket))
                // Login Success
            else
                // Login Fail
        }
    }

    验证成功后,您需要通过调用FormsAuthentication.Authenticate登录用户:http://msdn.microsoft.com/zh-cn/library/system.web.security.formsauthentication.authenticate.aspx <铅>

    编辑:这是FormsAuthentication.SetAuthCookie:
    http://msdn.microsoft.com/zh-CN/library/twk5762b.aspx

    此外,要将用户重定向到他想去的地方,请致电:FormsAuthentication.RedirectFromLoginPage:http://msdn.microsoft.com/zh-cn/library/system.web.security.formsauthentication.redirectfromloginpage.aspx <铅>

    链接文字


    如果验证成功,则可以设置自己的FormsAuthenticationTicket

    像这样的东西;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if (provider != null) {
        if (provider.ValidateUser(ticket)) {
            // Login Success
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                1, //version
                someUserName, //name
                DateTime.Now, //issue date
                DateTime.Now.AddMinutes(lengthOfSession), //expiration
                false, // persistence of login
                FormsAuthentication.FormsCookiePath
            );

            //encrypt the ticket
            string hash = FormsAuthentication.Encrypt(authTicket);
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

            Response.Cookies.Add(cookie);
            Response.Redirect(url where you want the user to land);
        } else {
            // Login Fail  
        }  
    }

    在将身份验证信息直接存储为cookie的情况下,您是正确的。但是使用强大的哈希函数(例如MD5 SHA1)既安全又好用。
    顺便说一句,如果您使用会话(也只是一个哈希cookie),则可以向其附加身份验证信息。


    推荐阅读

      linux命令简写自定义?

      linux命令简写自定义?,系统,状态,命令,代码,工具,发行,标准,软件,文件,别名,L

      登录账户命令linux?

      登录账户命令linux?,系统,管理,信息,工作,工具,名称,服务,网络,密码,命令,lin

      ssh命令登录linux?

      ssh命令登录linux?,服务,系统,地址,软件,状态,网络,命令,计算机,终端,服务器

      db2登录命令linux?

      db2登录命令linux?,环境,服务,系统,管理,工作,网站,软件,一致,平台,信息,linu

      linux根用户登录命令?

      linux根用户登录命令?,系统,密码,软件,状态,地址,合法,电脑,位置,检测,工具,L

      linux自定义快捷命令?

      linux自定义快捷命令?,系统,首次,位置,时间,文件,命令,链接,快捷键,终端,桌

      linux看登录密码命令?

      linux看登录密码命令?,密码,系统,信息,地址,命令,用户,位置,设计,电脑,用户

      金仓linux命令登录?

      金仓linux命令登录?,系统,服务,地址,密码,工作,名称,工具,网络,信息,命令,远

      linux命令行登录邮箱?

      linux命令行登录邮箱?,地址,代码,邮箱,工作,系统,标准,情况,单位,检测,数据,l

      linux自定义全局命令?

      linux自定义全局命令?,环境,系统,命令,别名,新增,信息,地方,文件,定义,用户,

      linux域名登录命令?

      linux域名登录命令?,地址,系统,服务,名称,信息,软件,环境,网站,工具,通信,lin

      linux命令行登录网站?

      linux命令行登录网站?,系统,网站,地址,工作,软件,密码,网络,第一,环境,中心,

      用linux登录电脑命令?

      用linux登录电脑命令?,系统,密码,电脑,地址,状态,网络,服务,单位,管理,合法,l

      linux退出登录的命令?

      linux退出登录的命令?,系统,密码,用户,命令,地址,状态,环境,工作,设备,操作,L

      linux登录数据库命令?

      linux登录数据库命令?,地址,系统,名字,服务,软件,标准,灵活,命令,数据库,读

      linux批量登录命令?

      linux批量登录命令?,系统,地址,工作,密码,标准,命令,数据,单位,管理,软件,怎

      远程登录linux命令?

      远程登录linux命令?,系统,服务,地址,软件,电脑,名称,数字,实时,网络,密码,如

      linux内存情况命令?

      linux内存情况命令?,情况,系统,信息,工具,总量,内存,命令,发行,环境,数据,lin

      linux命令行登录网页?

      linux命令行登录网页?,密码,网站,发行,环境,软件,网络,工具,传播,状态,情况,l

      linux命令切换登录?

      linux命令切换登录?,密码,系统,用户,第三,信息,命令,终端,对方,提示,其他用