2009-05-08 3 views
1

Я пытаюсь перейти с одного веб-сайта на своем локальном хосте на второй веб-сайт на своем локальном хосте.Аутентификация и поставщик ASP.NET

У обоих сайтов есть свой провайдер членства. Я пытаюсь использовать FormsAuthorizationTicket с сайта # 1 для SSO пользователя на сайт # 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");* 

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

ответ

1

Оба сайта должны делиться одинаковыми machine key.

+0

Мой машинный ключ определен в файле machine.config, который, как я полагаю, наследуется обоими веб-сайтами (поскольку оба находятся на моем локальном хосте). Есть ли что-то еще, что мне нужно сделать, чтобы удовлетворить это требование? \t \t 2009-05-08 18:30:27

+0

Это было больше наблюдения чем ответ. Если вы используете встроенный IIS в VS (это localhost: 3123/yoursite), я не думаю, что они делят файлы cookie. В конечном итоге у вас возникнет проблема с переходом домена (mysite1.com на ваш сайт3.net) –

0

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

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

+0

Я обрабатываю это в коде, потому что я не уверен, как это можно сделать в web.config. Это два отдельных веб-сайта, которые будут находиться в двух разных доменах в будущем с разными членскими поставщиками.По сути, я хочу, чтобы сайт № 1 разрешил пользователю, а затем передал значение роли в билете, чтобы сайт №2 знал, какие функции разрешить этому пользователю. Из того, что я прочитал, это невозможно обработать в веб-конфигурации. Можете ли вы привести меня к решению этого вопроса в web.config? – 2009-05-08 18:37:04

+0

Как сказал Ян, если ваши сайты живут на двух отдельных доменах (а не только на поддоменах), вы не сможете делиться куки-файлами между ними. –

Смежные вопросы