2009-03-03 11 views
25

認証が親ドメインではなくサブドメインで行われる場合、サブドメイン間でユーザーを認証できますか?例えばサブドメイン間のフォーム認証

ユーザーがログインsite1.parent.comに、その後、我々はreporting.parent.comにそれらを送信する必要があります。

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

これまで私が行ったすべての研究では、まずユーザーが親ドメインにログインしてから、各サブドメインが認証Cookieにアクセスします。

+0

は、ここに私の答えを参照してください。http://stackoverflow.com/a/14781927/3661 –

答えて

10

認証時にCookieを親ドメインに設定できますが、明示的に設定する必要があります。既定では、そのドメインが完全なドメインになります。

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

4

はい、確かです。いくつかの段階であなた自身をロールバックする必要があるかもしれませんが、それは実行可能でなければなりません。

1つのアイデア:境界を越えてそれらをリダイレクトするとき、ワンタイムパストークンを与えて、受信サブドメインにそれら(このユーザーから、このトークンでこのユーザー)を知らせるように指示します。

29

ユーザーを認証するときは、認証Cookieのドメインを第2レベルのドメイン(parent.com)に設定します。各サブドメインは要求に応じて親ドメインのクッキーを受け取ります。そのため、動作する共有認証クッキーが存在するため、それぞれのドメインに対する認証が可能です。

認証コード:サイドノートとして

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)); 
+1

私はクッキーを設定するには、「FormsAuthentication.SetAuthCookie」を使用します。違いはなんですか? –

7

、私は以外のサブドメインから呼び出されたときにも+1を働いたJROの方法を使用した後、FormsAuthenication.SignOut()メソッドが機能しなかったことがわかりましたwww /。 (.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); 
      } 
7

親ドメインにクッキーを設定する以外にも、必ずすべてのサイト(アプリケーション)ことを確認する必要があります彼らはすべて互いの認証チケットとクッキーを認識するように、同じvalidationKeyとdecryptionKey()を持っています。ここhttp://www.codeproject.com/KB/aspnet/SingleSignon.aspx

3

2かなり良い記事やるべきこと:

  1. のmachineKeyはAuthenticationCookieドメイン名が同じでなければなりません
  2. すべてのweb.config(メインドメインとサブドメイン(S))で同じである必要があります。

詳細については、followingの記事を参照してください。

4

Jroの答えがうまくいきます。ただし、webconfigフォーム認証setting "domain" を更新してください。そうしないと、フォーム認証のサインアウトが正しく機能しません。 Hereは私が出会ったサインアウトの問題です。ここでトリックは 'を持っていることです。 Cookieのドメインが ".parent.com"(Cookieインスペクタを使用)として設定されている接頭辞として使用します。

<authentication mode="Forms">   
     <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/> 
    </authentication>