我们在MembershipProvider
中有一个自定义ASP.NET
。现在有两种可能的方案可以验证用户:
用户通过输入用户名/密码登录login.aspx
页面。我使用了登录控件并将其与MyMembershipProvider
相关联。这完全正常。
身份验证令牌通过查询字符串中的某个URL从不同的网站传递。为此我在MembershipProvider.Validate(string authenticationToken)
中有一个重载,它实际上验证了用户。在这种情况下,我们无法使用登录控件。现在,如何在不实际使用登录控件的情况下使用相同的MembershipProvider
来验证用户?我尝试手动调用Validate
,但这并未签署用户身份。
以下是我正在使用的代码段
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
}
}
答案 0 :(得分:13)
验证成功后,您需要通过调用FormsAuthentication.Authenticate来登录用户:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx
编辑:这是FormsAuthentication.SetAuthCookie: http://msdn.microsoft.com/en-us/library/twk5762b.aspx
此外,要将用户重定向到他想去的地方,请致电:FormsAuthentication.RedirectFromLoginPage:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx
答案 1 :(得分:4)
如果验证成功,您可以设置自己的FormsAuthenticationTicket
。
像这样;
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
}
}
答案 2 :(得分:1)
如果将身份验证信息直接存储为cookie,您就是正确的。但是使用强哈希函数(例如MD5 + SHA1)非常安全。 顺便说一句,如果您使用会话(也只是一个哈希cookie),您可以附加身份验证信息。