2009-07-31 11 views
6

.netアプリケーションでシングルサインオンを実装する最適なソリューションは何ですか?私はGoogle検索し、いくつかのソリューションが見つかりましたが、私は非常にそれらのソリューションで納得されていません。.Netでシングルサインオンを実装する方法は?

ユーザーはウェブサイト1にログオンし、次にウェブサイト2に移動します。ウェブサイト2は、ユーザーがログインしたことをどのように知るのですか?私は妥当性をデータベースでwebsite2によってチェックされるURLにいくつかのトークンを渡すことによって推測する。つまり、私はウェブサイト1のすべてのURLをマーシャルする必要があります。

第2に、ユーザーがウェブサイト2を1時間閲覧し続けてからウェブサイト1に移動し続ける場合。その時までにウェブサイト1のセッションがタイムアウトしたので、ユーザーはログインページを見るでしょうか?しかし、この動作はシングルサインオン機能の場合とは異なります。

+0

これはシングルサインオンであり、シングルサインオンではなく、同じ認証でN個のサイトに対してN回サインインする必要があります。 –

+0

認証と認可を区別する必要があります。あなたは、彼らがあると主張する人を知っていることをユーザーに許可することができますが、あなたはまだ彼らができるコンテンツにアクセスするために、あなたの2つのウェブサイトのいずれかで、そのユーザーを承認する必要があり、各サイトにアクセスすることはできません。トークンは期限切れになりますが、通常はアクセスを維持するためにリフレッシュできます。 – htm11h

答えて

14

シングルサインオンの仕組みを誤解していると思います。

シングルサインオンを使用するウェブサイト1とウェブサイト2を考えてみましょう。

ログインWebサイトは、identityProviderで作成されます。これはログオン画面が表示される唯一の場所です。

ユーザーがwebsite1にアクセスし、ログインすることを選択すると、website1がユーザーをidentityProviderのログオン画面に送信します。ユーザーは、そのドメインの独自のログインCookieを削除するidentityProviderにログオンします(ユーザーが認証情報を保存して、再度プロンプトが表示されないようにすることもできます)。その後、ブラウザはウェブサイト1に戻ってブラウザにリダイレクトされます。リクエストにトークンが含まれていれば、そのウェブサイト1は開かれ、アイデンティティ情報を取得して独自のログインビットを実行します(独自の認証Cookieを削除します)。

次に、ユーザーはwebsite2にアクセスしてログオンを選択します。 Webサイト2は、ユーザーが誰であるかを既に知っているidentityProviderにバウンスされ、ユーザーがログイン情報を保存することを選択した場合、暗黙的に認証され、web2が開かれた別のトークンでWebサイト2にリダイレクトされ、

セキュリティの束が

は、だからあなたの懸念に対処するために

  1. ユーザーがログオンなどのみトークン等ホワイトリストのWebサイトに送信することができるように、特定のWebサイトへのトークンを制限し、その周りにありますウェブサイト1に移動し、ウェブサイト2に移動します。ウェブサイト2は、ユーザーがログインしたことをどのように知るのですか?それはしません。 Webサイト2はまずシングルサインオンサイトから認証情報を要求する必要があります。私はマーシャルにWEBSITE2するのにかかるWEBSITE1内のすべてのURLを必要とする意味
  2. ?あなたがウェブサイト1をアイデンティティプロバイダにしない限り、いいえ。それでも、トークンが必要な場合は、website2にidentityproviderにリダイレクトさせる方が苦しいでしょう。第二に
  3. ユーザーであれば、1時間と言うためにWEBSITE2を閲覧し、WEBSITE1に移動し続けます。その時までにウェブサイト1のセッションがタイムアウトしたので、ユーザーはログインページを見るでしょうか? - それはwebsite1の設定方法と、認証Cookieの存続期間によって異なります。
  4. しかし、この動作は機能シングルサインオンごととして間違っています。いいえ、ちがいます。シングルサインオンは、サイト間で共有されるフローティングトークンを取得することを意味しません。シングルサインオンを使用する各Webサイトは、独自の認証Cookieを作成します。ユーザーは、それが期限切れの認証Cookieを検出しWEBSITE1に戻ったら何が起こる可能性があることは、彼らが認証されている(静かに)して、新しいトークンは、新しいを作成WEBSITE1に押し戻される場合、再びシングルサインオンページへのオフをユーザに送信し、あります自身のための認証クッキー。
+0

これはシングルサインオンであり、シングルサインオンではなく、同じ認証でN個のサイトに対してN回サインインする必要があります。 –

+0

私はこのステップが「次にユーザーがウェブサイト2を訪問し、*ログオンを選択する」とは、OPが避けたいものだと思います。そんなことがあるものか? – CodeGrue

0

MSは数年前に企業内での紙をやった - 私たちはサンプルをアップしますが、実際のためにそれを実装したことがない - Single Sign-on

+0

私はすでにその論文を見てきましたが、疑問に答えることはできません。 –

3

をMicrosoftの公式アプローチはSAMLをラップActive Directoryフェデレーションサービス(経由でAD認証付き)。これは、あなたが探している特性を持っていますが、パブリックWebアプリケーションでは重すぎる可能性があります。

3

Active DirectoryなどでWindows認証を使用したくないと仮定しています.1つの方法は、説明したように、認証文字列のセキュリティトークンを使用して認証されたセッションをもう一方に渡す方法です。

両方のアプリケーションは、同じ公開暗号化キーを使用してセキュリティトークンをエンコード/デコードします。あなたが言うように、これは、サイト間の限られた、事前定義された遷移リンクを持っている場合はうまく動作しますが、それらのトークンを含むようにオンザフライでそれらのURLを生成する必要があるアプリケーション間の任意のページリンクを使用できるようにしたい場合。

タイムアウトを処理する方法は、セキュリティトークンにも有効期限が含まれていることです。各ページのリクエストに新しいセキュリティトークンを生成したり、アプリケーション間に新しいリンクを作成すると、

通常、セキュリティトークンにはユーザーIDとタイムアウトが含まれています。ログインチェッカーは、タイムアウトが切れていればユーザーIDまたはnullを戻します。

適切かつ安全にコードを作成するのは簡単な解決策ではありません。 Code Projectであらかじめ作成されたものを見つけることができますか?

1

あなたは、あなたのアプリケーションに基づいて、異なるアプリケーションに対して異なるSSOメカニズムを使用することができます。マシンのコンフィグレーションを使用して

  • シングルサインオンのセカンドレベルドメイン

  • Cross Domains Using Common database(インプリメンテーションは、当社が 世話をしなければならない)

以内ただし、I 「Out-of-box SSO」のサービスがLive、Google、 Yahoo、FacebookなどにSAMLをサポートして認証を提供することができます。これは、私たち自身のSSOサービスの実装を維持する問題を取り除くのに役立ちます。あなたはSSO仕事は、あなたがOAuthの社会のプロバイダを使用して、このリンクをhere

関連する問題