0

メインの IIS 7 サイト (local.mysite.com) とその下の VirtualDirectory (local.mysite.com/vdir) の間に SSO を実装しようとしています。

同じ MachineKey 設定と認証セクションを使用するように両方の web.config をセットアップしました。

<authentication mode="Forms">
  <forms name="myCookie" loginUrl="login.aspx" protection="All" path="/" enableCrossAppRedirects="true" domain=".mysite.com"/>
</authentication>
<machineKey validationKey="123" decryptionKey="456" validation="SHA1" decryption="AES"/>

現在、メインサイトでログインが機能しています。次のようなコードを使用して、独自の認証 Cookie を作成しています。

var ticket = new FormsAuthenticationTicket(1, state.Email, DateTime.Now, expiresDate, true, state.ToString());
string encryptedTicket = FormsAuthentication.Encrypt(ticket);

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Domain = FormsAuthentication.CookieDomain };
response.Cookies.Add(cookie);

ただし、ログイン後に仮想ディレクトリにアクセスするたびに、ユーザーは認証されません。FireBug を使用すると、Cookie がリクエストで送信されていることがわかりますが、コード ビハインドではアクセスできません。ただし、VirtualDirectories web.config からエントリを削除すると、Requests Cookie コレクションに「myCookie」Cookie が表示されます。

これがなぜなのかわかりません。誰かがそれに光を当てることができますか?IIS での VirtualDirectories の操作にあまり慣れていないため、不足している可能性があります。

4

2 に答える 2

0

問題は web.config 設定にありました。FormsAuthenticationModule OnAuthenticate モジュールのハンドラーを追加したところ、「暗号化操作中にエラーが発生しました」というエラーが表示されました。

これは、VirtualDirectory が持っていることが原因でした<httpRuntime targetFramework="4.5">が、これは親アプリケーションで設定されていませんでした。これを設定すると問題が解決しました。

于 2013-11-08T16:36:15.367 に答える
0

これを処理する最善の方法は、マシンキーの復号化を Framework20SP2 に戻すことです。

この記事から: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

その属性を .net 4.5 アプリケーションの machinekey に追加するだけです

<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />

今すぐ httpruntime から targetFramework="4.5" を削除する必要はありません。

于 2014-01-13T09:57:27.323 に答える