0

私は2つのWebサイトを持っています。最初のサイトはmyFirst.domain.comで、2番目のWebサイトはですmySecondSite.domain.com

それらは2つの異なるWebサーバーにとどまり、私の目標はクロスサイト認証を許可することです(私の本当の必要性は共有FormsAuthenticationCookieです)。

web.configファイル(マシンキーノード、フォームノード)を正しく設定しました。唯一の違いは、myFirstSiteではのよう~/login.aspxに表示されるloginUrlと、mySecondSiteではのように表示されるloginUrlについてhttp://myFirstSite.com/login.aspxです。

仮想ディレクトリを持っていないことに注意してください。2つの異なるWebアプリしかありません。

問題:mySecondSiteからmyFirstSiteログインページにアクセスすると、ログインページからリダイレクトされないので、Cookieが書き込まれていないようです。

以下は、この問題に関するいくつかのスニペットです。

MyFirsSite:

 <machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" />
        <authentication mode="Forms">
            <forms loginUrl="login.aspx" name="authCookie" enableCrossAppRedirects="true"></forms>
        </authentication>
        <authorization>
            <deny users="?" />
            <allow users="*"/>
        </authorization>

MyFirstSiteコードビハインド:

 FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "userName..", DateTime.Now, DateTime.Now.AddMinutes(30), true, "roles..");

        string ticket = FormsAuthentication.Encrypt(fat);

        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket);
        authCookie.Expires = fat.Expiration;
        authCookie.Domain = "myDomain.com";
        Response.Cookies.Add(authCookie);

//Here is other stuff about querystring checking in order to execute exact redirect, however it's not working, I always return to the login page.

MySecondSite:

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
        <authentication mode="Forms">
            <forms loginUrl="http://myFirstSite.domain.com/login.aspx?queryStringToIndicateUrlPage" enableCrossAppRedirects="true"></forms>
        </authentication>
        <authorization>

まあ、それだけです。残念ながら、それは機能しません。

注意しないでくださいqueryStringToIndicateUrlPage。同じアプリにリダイレクトする必要があるのか​​、別のアプリにリダイレクトする必要があるのか​​を知るための簡単な回避策にすぎません。

4

1 に答える 1

0

<forms>2 つのドメイン間で共有される Cookie ベースの認証を使用しているため、要素でこれを示す必要があります。

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
    <authentication mode="Forms">
        <forms domain=".domain.com" ... />
    </authentication>

最初の「.」に注意してください。ドメイン名の前に付けて、サブドメイン間で Cookie を共有できるようにします。

于 2012-09-03T20:48:11.847 に答える