26

認証が親ドメインではなくサブドメインで行われる場合、サブドメイン全体でユーザーを認証することは可能ですか?

例えば:

ユーザーが site1.parent.com にログインし、reporting.parent.com に送信する必要があります。

ログインがサブドメインで発生した場合でも、レポート サイトに対してそれらを認証できますか?

これまでに行ったすべての調査では、ユーザーが最初に親ドメインにログインし、次に各サブドメインが認証 Cookie にアクセスできるようになっています。

4

7 に答える 7

30

ユーザーを認証するときは、認証 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));
于 2009-03-03T21:06:22.137 に答える
10

認証時に Cookie を親ドメインに設定できますが、明示的に設定する必要があります。デフォルトでは、現在のドメイン全体になります。

認証 Cookie が親ドメインに正しく設定されると、すべてのサブドメインがそれを読み取れるようになります。

于 2009-03-03T21:02:55.030 に答える
7

親ドメインに Cookie を設定するだけでなく、すべてのサイト (アプリ) が同じ validationKey と decryptionKey () を持っていることを確認して、すべてのサイトが互いの認証チケットと Cookie を認識できるようにする必要があります。ここのかなり良い記事http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

于 2011-06-24T04:37:16.790 に答える
7

補足として、+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);
            }
于 2010-07-02T09:55:08.350 に答える
5

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>
于 2015-06-19T09:05:18.290 に答える
4

はい、そうです。いくつかの段階で自分でロールバックする必要があるかもしれませんが、それは実行可能なはずです.

1 つのアイデア: 境界を越えてリダイレクトする際に、ワンタイム パス トークンを渡してから、受信サブドメインにそれらを期待するように伝えます (このユーザー、この IP から、このトークンを使用)。

于 2009-03-03T20:57:52.453 に答える
3

2 やるべきこと:

  1. MachineKey は、すべての web.config (メイン ドメインとサブ ドメイン) で同じにする必要があります。
  2. AuthenticationCookie ドメイン名は同じである必要があります。

詳細については、の記事に従ってください。

于 2012-10-03T03:07:39.683 に答える