質問

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

例:

ユーザーは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つのこと:

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

フォロー記事で詳細を確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top