2009-05-08 5 views
1

내 localhost의 한 웹 사이트에서 내 localhost의 두 번째 웹 사이트로 이동하려고합니다.ASP.NET 인증 및 공급자

두 사이트 모두 고유 한 멤버 자격 공급자가 있습니다. 사이트 # 1에서 FormsAuthorizationTicket을 사용하여 사용자를 사이트 # 2로 SSO하려고합니다. System.Security.Cryptography.CryptographicException :

은 현재 내가이 오류 받고 있어요 패딩이 유효하고

나는이 시점까지 촬영 한 단계

을 제거 할 수없는 것은 다음과 같습니다 는 특정 키 값으로 요소를 설정 유효성 검사 및 암호화의 machineKey 특성을 "3DES"로 설정하십시오. # 1 웹 사이트에서 제공된 것과 같이 암호화 된 티켓이 # 2 웹 사이트에서 동일한 값을 갖는지 로깅을 통해 확인되었습니다.


내 코드는 여기에 있습니다 : 웹 사이트 # 2에서

 *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에 방문 페이지 코드 :


 *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

+0

그것이 관찰 많았다 대답보다. VS (기본 제공 localhost : 3123/yoursite)에 내장 된 IIS를 사용하는 경우 쿠키를 공유하지 않는다고 생각합니다. 장기적으로 도메인 (mysite1.com에서 yoursite3.net으로)을 넘어서 문제가 발생할 것입니다. –

0

사이트에서 일치하는 컴퓨터 키가 있어야한다는 점에서 Ian은 정확합니다. 또한 회원 정보 제공자가 특히 암호 암호화와 관련하여 동일한 설정을 갖고 있는지 확인해야합니다.

또한이 코드를 완전히 처리하는 이유는 무엇입니까? 두 사이트의 Web.Config를 사용하여이 기능을 매우 쉽게 구성 할 수 있어야합니다. 본질적으로, 당신은 많은 재 작업을하고 필요하지 않은 잠재적 문제 영역을 도입합니다 (여기서 언급하지 않은 이유가없는 한).

+0

web.config에서 어떻게 할 수 있는지 잘 모르므로 코드에서이 문제를 처리하고 있습니다. 이들은 서로 다른 두 개의 웹 사이트로, 서로 다른 두 개의 도메인에 있으며 서로 다른 회원 쉐어가 있습니다.기본적으로 사이트 # 1에 사용자 권한을 부여한 다음 티켓에 역할 값을 전달하여 사이트 # 2가이 사용자를 허용 할 기능을 알 수 있도록하려고합니다. 내가 읽은 내용은 웹 구성에서 처리 할 수 ​​없습니다. web.config에서이 문제를 해결할 수 있습니까? –

+0

Ian이 위에서 언급했듯이 사이트가 두 개의 별도 도메인 (하위 도메인 만있을 수 없음)에 살고 있다면 사이트간에 쿠키를 공유 할 수 없습니다. –