認証が親ドメインではなくサブドメインで行われる場合、サブドメイン全体でユーザーを認証することは可能ですか?
例えば:
ユーザーが site1.parent.com にログインし、reporting.parent.com に送信する必要があります。
ログインがサブドメインで発生した場合でも、レポート サイトに対してそれらを認証できますか?
これまでに行ったすべての調査では、ユーザーが最初に親ドメインにログインし、次に各サブドメインが認証 Cookie にアクセスできるようになっています。
認証が親ドメインではなくサブドメインで行われる場合、サブドメイン全体でユーザーを認証することは可能ですか?
例えば:
ユーザーが site1.parent.com にログインし、reporting.parent.com に送信する必要があります。
ログインがサブドメインで発生した場合でも、レポート サイトに対してそれらを認証できますか?
これまでに行ったすべての調査では、ユーザーが最初に親ドメインにログインし、次に各サブドメインが認証 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));
認証時に Cookie を親ドメインに設定できますが、明示的に設定する必要があります。デフォルトでは、現在のドメイン全体になります。
認証 Cookie が親ドメインに正しく設定されると、すべてのサブドメインがそれを読み取れるようになります。
親ドメインに Cookie を設定するだけでなく、すべてのサイト (アプリ) が同じ validationKey と decryptionKey () を持っていることを確認して、すべてのサイトが互いの認証チケットと Cookie を認識できるようにする必要があります。ここのかなり良い記事http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
補足として、+1 でうまく機能する jro のメソッドを使用した後、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);
}
Jroの答えはうまくいきます。ただし、必ず webconfig のフォーム認証を更新してsetting "domain"
ください。そうしないと、フォーム認証のサインアウトが正しく機能しません。これが私が遭遇したサインアウトの問題です。ここでのコツは、'.' を使用することです。ドメインが「.parent.com」としてCookieに設定されているため、プレフィックスとして(Cookieインスペクタを使用)。
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
はい、そうです。いくつかの段階で自分でロールバックする必要があるかもしれませんが、それは実行可能なはずです.
1 つのアイデア: 境界を越えてリダイレクトする際に、ワンタイム パス トークンを渡してから、受信サブドメインにそれらを期待するように伝えます (このユーザー、この IP から、このトークンを使用)。
2 やるべきこと:
詳細については、次の記事に従ってください。