Использование пользовательского MembershipProvider без элемента управления входом в систему в ASP.NET
-
09-06-2019 - |
Вопрос
У нас есть такой обычай MembershipProvider
в ASP.NET
.Теперь есть 2 возможных сценария, по которым пользователь может пройти проверку подлинности:
Вход пользователя через
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
}
}
Решение
После успешного завершения проверки вам необходимо авторизовать пользователя, вызвав FormsAuthentication .Аутентификация: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx
Редактировать:Это проверка подлинности формы.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx
Кроме того, чтобы перенаправить пользователя обратно туда, куда он хотел перейти, вызовите:Проверка подлинности форм.Перенаправление с LoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx
Другие советы
Вы можете установить свой собственный 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
}
}
Вы правы в том, что хотите сохранить информацию об авторизации непосредственно в виде файла cookie.Но используя сильную хэш-функцию (например,MD5 + SHA1) является отличным и безопасным.Кстати, если вы используете сеансы (которые также являются просто хэш-файлом cookie), вы могли бы прикрепить к нему информацию аутентификации.