4

私はいくつかのアプリケーションを持っていますが、そのうちの 1 つは認証を管理する中央アプリケーションであり、LogOnページが他のアプリケーションにインポートされIFrameます。

userNamepasswordが正しい場合、 という名前の Cookie を作成しますuserInfo

userInfoさて、現在のアプリで、のCookieが存在するかどうかを確認したいと思います。ブラウザ(クライアント側)に存在することを確認する必要があると思います。

可能でなければならないので、どうすればできますか?

前もって感謝します。

4

1 に答える 1

9

Cookie をクロスドメインで共有することはできません。アプリケーションが同じドメインでホストされていない場合は、これを忘れる必要があります。ブラウザーは (明らかなセキュリティ上の理由から) Cookie をクロスドメインに送信しないため、機能しません。クロスドメイン シングル サインオンを実装する方法は他にもあります (私の回答の 2 番目の部分を参照してください)。

ここで、アプリケーションが同じドメインにあり、複数のアプリケーションがルート ドメインの異なるサブドメインに分散しているとします。

  • login.foo.com
  • app.foo.com
  • xxx.foo.com

これらのサブドメイン間で認証を共有したいとします。domain必要な作業は、web.configのプロパティをルート ドメインに設定するように指定することだけです。

<authentication mode="Forms">
  <forms
    loginUrl="https://login.foo.com"
    requireSSL="true"
    protection="All"
    timeout="120"
    domain="foo.com"
    slidingExpiration="false"
    name="sso" />
</authentication>

すべてのアプリケーションに同じ設定を適用する必要がありweb.configます。そして、それはあなたがする必要があるほとんどすべてです。サブドメインの 1 つでユーザーが認証されると、サブドメイン間で Cookie を共有できるため、他のドメインでも自動的に認証されます。


クロスドメイン シングル サインオンを実現したい場合は、別のアプローチを取る必要があります。異なるアプリケーション間で同じマシン キーを使用して、認証トークンを暗号化できます。手順は次のとおりです。

  1. ユーザーhttps://foo.comはこのドメインでまだ認証されていないため、ログオン画面に移動して表示されます。
  2. ユーザーが認証され、認証 Cookie が発行され、foo.comドメインに対して有効になります。
  3. ここで、ユーザーはhttps://bar.comこのドメインにアクセスして、自動的に認証される必要があります。あるページでhttps://foo.com、投稿される認証 Cookie の値を含むフォームを作成できます。

    <form action="https://bar.com" method="post">
        <input type="hidden" name="token" value="PUT THE VALUE OF THE AUTHENTICATION COOKIE HERE" />
        <button type="submit">Go to bar.com</button>
    </form>
    
  4. ユーザは、認証 Cookie を に送信しbar.comます。このフォーム送信を受け取ったスクリプトは、投稿された認証トークンの値を読み取り、FormsAuthentication.Decryptメソッドを使用して認証チケットを復号化し、ユーザー名を読み取ります。両方のアプリケーションが同じマシン キーfoo.combar.com使用しているため、foo.com で暗号化されたチケットは bar.com によって正常に復号化されます。
  5. トークンから認証されたユーザー名を抽出したスクリプトは、メソッドを使用してbar.com有効なフォーム認証 Cookie を発行します。bar.comFormsAuthentication.SetAuthCookie
  6. ユーザーは現在認証されていますbar.com

このモデルの全体的なセキュリティは、フォーム認証トークンを から に POST するときに SSL が使用されるため、中間者がトークンを取得できず、両方のアプリケーションが暗号化と復号化のために同じマシン キーを共有するという事実に依存しfoo.combar.comます。それらのトークン。

于 2012-06-12T14:54:47.333 に答える