Использование пользовательского MembershipProvider без элемента управления входом в систему в ASP.NET

StackOverflow https://stackoverflow.com/questions/41652

  •  09-06-2019
  •  | 
  •  

Вопрос

У нас есть такой обычай MembershipProvider в ASP.NET.Теперь есть 2 возможных сценария, по которым пользователь может пройти проверку подлинности:

  1. Вход пользователя через login.aspx страницу, введя свое имя пользователя / пароль.Я использовал Контроль входа в систему и связал это с MyMembershipProvider.Это работает совершенно нормально.

  2. Токен аутентификации передается через некоторый 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), вы могли бы прикрепить к нему информацию аутентификации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top