7

私は現在、上記の問題に対する素晴らしい解決策を探しています。おそらく、.NET でフォーム認証を実行します。

で実行されている ASP.NET MVC アプリと、で実行されa.mydomain.comている Java ベースのアプリがありますb.mydomain.com

各アプリにログインする必要がないようにする最善の方法は何ですか。にログインしてa.mydomain.comから Java を開くと、b.mydomain.comすでにログインしていることを確認して確認できますか?

WCF AuthenticationService クラスはこれで機能しますか? JavaScript から AJAX 要求を実行してb.mydomain.com、.NET アプリに既にログインしているかどうかを確認できますか?

4

3 に答える 3

2

mydomain.comパブリック サフィックス リスト ( http://publicsuffix.org/list/ ) にない限りa.mydomain.com、ドメイン Cookie を配置できます。.mydomain.com

( Cookie を配置する際に 1 レベルしか下がらないことに注意してください: Cookiea.b.mydomain.comを配置することはできません.mydomain.com)

Cookie はb.mydomain.com(および と同様*.mydomain.commydomain.com) に送信され、セッションを開くためのトークンとして使用できます。そのため、必ず *.myDomain.com サブドメイン全体を制御し、httpOnly およびセキュア (https) にしてください。

Response.SetCookie(new HttpCookie("myCookieName", "myCookieValue") { HttpOnly = true, Domain = ".myDomain.com", Secure=true });

Atlassian Crowd ソリューションhttp://www.atlassian.com/software/crowd/overviewの一部は、この Cookie メカニズムに基づいています。

だからあなたかもしれません:

  1. a.domain.com でフォーム認証を有効にする
  2. ログインに成功するmyTokenと、a.myDomain.com と b.myDomain.com で知られるハッシュ キーを使用して、値に userId とハッシュされた userId を含む Cookie を作成します。
  3. ドメイン .myDomain.com で Cookie を設定します
  4. ユーザーが b.myDomain.com に入ると、Cookie サーバー側 (java) をチェックして、userId とハッシュ値が一致するかどうかを確認します。
  5. Cookie が正しい場合は、ユーザー userId のセッションを開きます

cookie クライアント側にアクセスできないことに注意してください (つまり、nodejs などのサーバー側 js の場合を除いて、js cookie の処理はありません)。

于 2013-01-24T17:13:57.960 に答える
1

エンタープライズ sso プロトコルの 1 つ、Oauth2 または ws-federation を使用することをお勧めします。これにより、サービスを構成する際に最大限の柔軟性が得られます。これら 2 つをフェデレートするだけでなく、後でアプリケーション環境を簡単に拡張できます。どちらのプロトコルも、アプリが同じドメインにある必要はありません。

これは単純なニーズに対して複雑すぎるように聞こえるかもしれませんが、一度実行すれば、将来アプリケーションに何が起こっても、sso の問題は永遠に解決されます。

于 2013-01-24T17:25:23.290 に答える