2009-08-07 10 views
12

私はそれらの間でユーザーアカウント情報を共有する一連のサイトを計画しています。ユーザーがOpenIDを使用してログインすると、サイトのいずれかにアクセスでき、そのユーザーが誰であるかがわかります。OpenIDを使用したASP.NET MVCマルチサイトSSO

これを達成するために採用できる一般的なパターン/ベストプラクティスは何ですか?

+0

私は同様の問題があると思います。どのように実装したか説明できますか? –

答えて

12

すべてのサイトがURLに共通のホスト名を共有している場合、Cookieのパスを「/」に設定する認証Cookie(FormsAuthentication.SetAuthCookie)を設定して、すべてのサイトでユーザーがログインしていることを確認できます。

サイトが共通のホスト名を共有していない場合、本当に「一度サインインして、どこにでもログインしてください」という唯一の方法は、すべての認証が1つのサイト(おそらくユーザーの認証に専念しているサイト)と、他のサイトが認証のためにそのサイトにユーザーをリダイレクトしてから、そのサイトがリダイレクトします。本質的には、その認証サイトはアイデンティティプロバイダになり、OpenIDプロバイダの役割をほぼ正確に満たしています(実際、この正確な目的でDotNetOpenAuthをここで使用できます)。あなたの目標は、ユーザーがOpenIDでログインできるように思えるので、その認証サイトのOpenIDプロバイダはOpenIDを使用してユーザーを認証できます。自分の純粋な委任OpenIDプロバイダは、認証要求のレルムが信頼できるサイトのリングの1つである限り、checkid_immediate要求に常に即座に応答するように記述することができます。したがって、すべてのサイトでシングルサインオンを行うことができます。

+0

REはグローバル認証クッキーを設定します:それは脆弱性を引き起こしませんか?私はこの種の攻撃が何を呼び出すのか忘れていましたが、authcookieが盗まれた時です。あるいは、私はこれが安全ではないと誤解していますか? さらに、新しいスタックエクスチェンジサイトでは、(自動的にメインメニューにログインした後に、そのメタにログインした後の)新しいスタックエクスチェンジサイトの仕組みがありますか? –

+0

これはグローバルクッキーではありません。ほとんどのクッキーがそうであるように、単一のインターネットホストと同じくらい広いです。そのホスト上のすべてのサイトを制御または信頼する場合にのみ、これを行うことができます。 すべての* .stackexchange.comサイトがユーザーのログイン情報を共有している場合は、おそらくドメイン全体にわたるCookieになります。 –

1

次のパターンにおけるMicrosoftからのWebサービスのセキュリティ上の&プラクティスを検討してください:

ブローカ経由の認証 - http://msdn.microsoft.com/en-us/library/aa480560.aspx

主なトピックがある - Webサービスセキュリティ

シナリオ、パターン、および適用指針をWeb Services Enhancements(WSE)3.0

http://msdn.microsoft.com/en-us/library/aa480545.aspx

最終的には、あなたがそれをやることができる方法がたくさんあります。あるWebサイトから別のドメインを指し示すトークンを使ってURLを構築することで、簡単なシングルサインオンを実現しました。コード化された&暗号化されたトークンには、前のドメインにサブミットする詳細が含まれていました。第2ドメイン上で着信要求を受信すると、基礎となるウェブサービスは、着信要求のトークンが、両方のドメインに知られている共有秘密の秘密を使用して、前のドメインで有効であることをチェックする。

関連する問題