2009-05-08 22 views
1

localhostの1つのWebサイトからlocalhostの2番目のWebサイトに移動しようとしています。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 <のmachineKey解読= "3DES" \t \t \t \t \t validationKey = '123' \t \t \t \t \t decryptionKey = '123' 検証= '3DES' /> –

+0

は観察以上でした答えよりも。 VSで組み込みのIISを使用している場合(そのlocalhost:3123/yoursite)私は彼らがクッキーを共有すると思いません。長期的には、ドメイン(mysite1.comからyoursite3.netへ)を通過する際に問題が発生します。 –

0

あなたのサイトには、一致するマシンキーが必要です。また、メンバーシップ・プロバイダーが同じ設定を持っていることを確認する必要があります。特にパスワードの暗号化が重要です。

また、なぜこのコードを完全に処理していますか?両方のサイトのWeb.Configを使ってこの機能を非常に簡単に設定できるはずです。本質的に、あなたは多くのリワークを行い、必要ではない潜在的な問題領域を導入しています(あなたがここに述べなかった理由がない限り)。

+0

web.configでどのように実行できるかわからないので、これをコードで処理しています。これらは2つの別個のウェブサイトであり、将来は異なるメンバーシップロバイダを持つ2つの異なるドメインになります。基本的には、サイト#1にユーザーを承認してからチケットにロールの値を渡して、サイト#2がこのユーザーを許可する機能を認識するようにしたいと考えています。 私がこれを読んだことから、これはウェブ設定では処理できません。あなたは私をweb.configで解決するまで導くことができますか? –

+0

上記のIanのように、サイトが2つの別々のドメイン(サブドメインだけでなく)に存在する場合、それらのドメイン間でCookieを共有することはできません。 –

関連する問題