サブドメインにわたるフォーム認証
-
03-07-2019 - |
質問
親ドメインではなくサブドメインで認証が行われる場合、サブドメイン間でユーザーを認証することは可能ですか?
例:
ユーザーはsite1.parent.comにログインしてから、それらをreporting.parent.comに送信する必要があります。
サブドメインでログインが発生した場合でも、レポートサイトに対して認証できますか?
これまでに行ったすべての調査では、最初にユーザーが親ドメインにログインしてから、各サブドメインが認証Cookieにアクセスできます。
解決
認証時にCookieを親ドメインに設定できますが、明示的に設定する必要があります。デフォルトでは、現在の完全なドメインになります。
認証Cookieが親ドメインに正しく設定されると、すべてのサブドメインがそれを読み取れるようになります。
他のヒント
ユーザーを認証するとき、認証Cookieのドメインを第2レベルのドメイン、つまりparent.comに設定します。各サブドメインは、リクエストに応じて親ドメインのCookieを受信します。そのため、使用する共有認証Cookieがあるため、それぞれに対する認証が可能です。
認証コード:
System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName,
False));
補足として、jroのメソッドを使用して+1がうまく機能した後、www /以外のサブドメインから呼び出されたときにFormsAuthenication.SignOut()メソッドが機能しないことがわかりました。 (.Domainプロパティが一致しないため推測しています)-これを回避するために、私は使用しました:
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "parent.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Cookieを親ドメインに設定することに加えて、すべてのサイト(アプリ)が同じvalidationKeyとdecryptKey()を持ち、お互いの認証チケットとCookieをすべて認識するようにする必要があります。ここでかなり良い記事 http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
はい、確かです。いくつかの段階で自分でロールする必要があるかもしれませんが、それは実行可能でなければなりません。
1つのアイデア:境界を越えてリダイレクトするときに、ワンタイムパストークンを渡してから、受信サブドメインにそれらを期待するように伝えます(このユーザーは、このIPからこのトークンを使用します)。
Jroの答えはうまくいきます。ただし、webconfigフォーム認証 setting" domain"
を必ず更新してください。
そうしないと、フォーム認証のサインアウトが正しく機能しません。 ここはサインアウトの問題です全体。ここでのトリックは、「。」を持つことです。ドメインがCookieに" .parent.com"として設定されているため、プレフィックスとして(Cookieインスペクターを使用します)。
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
2つのこと:
- MachineKeyはすべてのweb.config(メインドメインとサブドメイン)で同じである必要があります
- AuthenticationCookieドメイン名は同じである必要があります。
フォロー記事で詳細を確認してください。