Использование Custom MembershipProvider без элемента управления Login в ASP.NET - PullRequest
8 голосов
/ 03 сентября 2008

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

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

  2. Токен аутентификации передается через некоторый URL в строке запроса на разных веб-сайтах. Для этого у меня есть одна перегрузка в MembershipProvider.Validate(string authenticationToken), которая фактически проверяет пользователя. В этом случае мы не можем использовать элемент управления Login . Теперь, как я могу использовать тот же 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
    }
}

Ответы [ 3 ]

13 голосов
/ 03 сентября 2008

После успешной проверки вам необходимо войти в систему, вызвав 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

текст ссылки

4 голосов
/ 03 сентября 2008

Вы можете установить свой собственный 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  
    }   
}
1 голос
/ 18 апреля 2011

Вы правы в случае непосредственного хранения информации об аутентификации в виде куки. Но использование сильной хеш-функции (например, MD5 + SHA1) прекрасно и безопасно. Кстати, если вы используете сеансы (которые также являются хеш-файлом cookie), вы можете прикрепить к ним информацию аутентификации.

...