共有認証 Cookie のセットアップで奇妙な動作に気付きました。これが私のシナリオです。
次のようなドメインを持つ 2 つのアプリケーションがあります。
login.mydomain.com system.mydomain.com
ユーザーを login.mydomain.com にリダイレクトし、そこから Cookie を mydomain.com にドロップしています。
system.mydomain.com:
void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Context.User == null || !Request.IsAuthenticated)
{
HttpContext.Current.Response.Redirect("http://login.mydomain.com");
}
}
login.mydomain.com
protected void btnSubmit_Click(object sender, EventArgs e)
{
pnlLoginNotice.Visible = true;
if (Membership.ValidateUser(txtUsername.Text, txtPassword.Text))
{
HttpCookie cookie = FormsAuthentication.GetAuthCookie(txtUsername.Text, chkRememberMe.Checked);
cookie.Domain = "mydomain.com";
Response.Cookies.Set(cookie);
}
}
Web.config:
<authentication mode="Forms" >
<forms timeout="2880" name=".COMMONAUTH" />
</authentication>
現在、私が見ている動作は、.COMMONAUTH Cookie が system.mydomain.com の下にドロップされているのを見つけることですが、mydomain.com の下には同じ Cookie があります。サイトでしばらく非アクティブになった後に表示されることに気付きました。
フォーム認証を維持するために、asp.netが独自にCookieをドロップしている可能性はありますか?
更新 次のアプローチを試しました
1:
system.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="1" name=".COMMONAUTH" />
</authentication>
login.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="2" name=".COMMONAUTH"/>
</authentication>
1 分経過後に system.mydomain.com のページを更新すると、system.mydomain.com の下に .COMMONAUTH Cookie が表示されます
2:
system.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="2" name=".COMMONAUTH" />
</authentication>
login.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="1" name=".COMMONAUTH"/>
</authentication>
1 分経過後に system.mydomain.com のページを更新すると、ログアウトされます。
3:
system.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="1" name=".COMMONAUTH" domain="mydomain.com" />
</authentication>
login.mydomain.com Web.config
<authentication mode="Forms" >
<forms timeout="2" name=".COMMONAUTH" domain="mydomain.com"/>
</authentication>
1 分が経過した後に system.mydomain.com のページを更新すると、すべて同じままで、まだ認証されています。3 番目のアプリケーションがこのセットアップに導入されたときに何が起こるかはわかりません
結論
私の問題は、web.config でドメインを設定していないことが原因だと思うので、system.mydomain.com は Cookie を更新しようとしていますが、どこでそれを行うべきかを伝えていないため、独自のドメインを使用しています。
私の問題は、これらのアプリケーションが異なるドメイン バインディングを持ち、複数のクライアントに対して 1 回ホストされることです。FormsAuthentication.CookieDomain は読み取り専用なので設定できません。
オプション 2 を使用して、Cookie 発行者に他のアプリケーションからのタイムアウトを短くする必要がありますか? これには何らかの影響がありますか?