Проверка подлинности ASP.NET и поставщик - PullRequest
1 голос
/ 08 мая 2009

Я пытаюсь перейти с одного веб-сайта на моем локальном хосте на второй веб-сайт на моем локальном хосте.

У обоих сайтов есть свой провайдер членства. Я пытаюсь использовать FormsAuthorizationTicket с сайта № 1 для единого входа пользователя на сайт № 2.

В настоящее время я получаю эту ошибку: System.Security.Cryptography.CryptographicException: заполнение недопустимо и не может быть удалено

Шаги, которые я предпринял до этого момента, включают: Установка элемента для определенных значений ключа Установите атрибуты machineKey проверки и шифрования на «3DES» Посредством регистрации подтвердил, что зашифрованный билет имеет то же значение на веб-сайте № 2, что и на веб-сайте № 1.


Мой код здесь:

        *FormsAuthentication.Initialize();
        FormsAuthenticationTicket newTicket = new 
            FormsAuthenticationTicket(1 // Ticket Version
            , Login1.UserName                       // User Name
            , DateTime.Now                          // Creation Date
            , DateTime.Now.AddDays(1)   // Expiration Date
            , true                                              // Is Persistant
            , Login1.UserName);                 // This should be a list of Roles


        string strEncyptedTicket = FormsAuthentication.Encrypt(newTicket);
        HttpCookie myCookie = new HttpCookie("cryptCookie", strEncyptedTicket);
        myCookie.Values.Add("username", Login1.UserName);
        myCookie.Values.Add("cryptTick", strEncyptedTicket);
        Response.Cookies.Add(myCookie);*

На веб-сайте № 2 я создал целевую страницу для проверки заявки и перенаправления на страницу только для участников. Во время расшифровки происходит, когда я получаю ошибку, указанную выше.

Вот код моей целевой страницы на сайте №2:


        *FormsAuthenticationTicket fat2 = FormsAuthentication.Decrypt(Request.Cookies["cryptCookie"].Values["cryptTick"]);


        MembershipUser mu = Membership.GetUser(Request.Cookies["cryptCookie"].Values["username"]);
        if (mu == null)
        {
            lblInfo.Text += "member not found";
            return;
        }

        Response.Redirect(@"~\MemberPages\MemberPage.aspx");*

Если у кого-нибудь возникнет идея помочь, я с удовольствием попробую.

Ответы [ 2 ]

1 голос
/ 08 мая 2009

Оба сайта должны использовать один и тот же ключ компьютера .

0 голосов
/ 08 мая 2009

Ян прав в том, что на ваших сайтах должен быть соответствующий машинный ключ. Кроме того, вы должны убедиться, что ваши поставщики членства имеют те же настройки, особенно в отношении шифрования пароля.

Кроме того, почему вы обрабатываете это полностью в коде? Вы должны быть в состоянии настроить эту функцию с помощью Web.Config обоих сайтов очень легко. По сути, вы делаете много переделок и представляете потенциальные проблемные области там, где это не нужно (если у вас нет причин, по которым вы не указали здесь).

...