3

認証とセッションを共有するサブドメインをサポートするように DEV 環境を構成しようとしています。

現在、mydomain、sd1.mydomain、sd2.mydomain、sd3.mydomain の要求を処理するように、DEV マシンで IIS とホスト ファイルを構成しました。Web アプリケーション自体は期待どおりに動作しており、認証が必要なページを除いて、すべてのサブドメインのすべてのページを閲覧できます。ログインしようとすると、サーバー側ではすべてが完璧に見えますが (ユーザーが見つかり、Cookie が作成され、応答に追加されました)、Cookie がブラウザーに届きません (Chrome と IE を試しました)。

認証チケットを作成して保存するコードがあり、web.config の authentication.forms に domain=".mydomain" を設定します。

var now = DateTime.UtcNow.ToLocalTime();

var ticket = new FormsAuthenticationTicket(
 1 /*version*/, _user.Username, now, now.Add(FormsAuthentication.Timeout),
isPersistentCookie, _user.Username, FormsAuthentication.FormsCookiePath);

var encryptedTicket = FormsAuthentication.Encrypt(ticket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
if (ticket.IsPersistent)
{
     cookie.Expires = ticket.Expiration;
}
cookie.Secure = FormsAuthentication.RequireSSL;
cookie.Path = FormsAuthentication.FormsCookiePath;
if (FormsAuthentication.CookieDomain != null)
{
     cookie.Domain = FormsAuthentication.CookieDomain;
}

_httpContext.Response.Cookies.Add(cookie);

デバッグすると、上記のコードは正常に動作し、ユーザーは正しく、正しいドメインの Cookie が応答に追加されます。

domain=".mydomain" を web.config から削除すると、認証は機能しますが、サブドメインではなく mydomain でのみ機能します。

私が間違っていることは何ですか?

4

2 に答える 2

3

から先頭のドットを削除します。ここに記載されているように、最初のドットと同じようdomain=にする必要があります。domain=".mydomain.com"

この設定は、Cookie と認証の両方にあります。

于 2013-03-10T21:15:01.633 に答える
1

何も間違ってない。ドメインが Cookie で提供されていない場合、Cookie は発行ドメインに対してのみ機能するはずです。

于 2013-03-10T21:01:17.780 に答える