質問

.netアプリケーションにシングルサインオンを実装する最適なソリューションは何ですか?私はグーグルで検索し、いくつかのソリューションを見つけましたが、それらのソリューションにあまり確信がありません。

ユーザーはwebsite1にログオンしてからwebsite2に移動します。ユーザーがログインしたことを、website2はどのように知るのですか? urlにトークンを渡すと、データベースのwebsite2によって有効性がチェックされます。それは、website2にアクセスするwebsite1のすべてのURLをマーシャルする必要があることを意味しますか?

次に、ユーザーがWebサイト2の閲覧を1時間続けてからWebサイト1に移動した場合。その時点で、website1セッションはタイムアウトしているため、ユーザーにはログインページが表示されます。ただし、この動作はシングルサインオン機能ごとに間違っています。

役に立ちましたか?

解決

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

シングルサインオンを使用したいwebsite1とwebsite2を考慮します。

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

ユーザーがwebsite1にアクセスし、website1にログインすることを選択すると、identityProviderのログオン画面にユーザーが送信されます。ユーザーはidentityProviderにログオンし、そのドメインの独自のログインCookieをドロップします(おそらく、ユーザーが認証情報を保存できるようにして、再度プロンプトが表示されないようにします)。その後、ブラウザをリダイレクトして、リクエスト内のトークンを含むwebsite1にリダイレクトし、website1がクラックして開き、ID情報を取得し、独自のログインビットを実行します(必要に応じて持続する独自の認証Cookieをドロップします)。

次に、ユーザーはwebsite2にアクセスし、ログオンを選択します。 Website2はユーザーをidentityProviderにバウンスします。ユーザーは、ユーザーが誰であるかを既に知っています。ユーザーがログイン情報を保存することを選択した場合、サイレント認証を行い、website2がクラックして開き、独自のログインビットを実行する別のトークンでwebsite2にリダイレクトします。

周辺には多くのセキュリティがあり、トークンを特定のWebサイトに限定し、トークンをホワイトリストに登録されたWebサイトなどにのみ送信できるようにします。

あなたの懸念に対処するため

  1. ユーザーはwebsite1にログオンしてからwebsite2に移動します。ユーザーがログインしたことを、website2はどのように知るのですか?そうではありません。 website2は、最初にシングルサインオンサイトから認証情報を要求する必要があります。
  2. つまり、website2にアクセスするwebsite1のすべてのURLをマーシャルする必要があるということですか?いいえ、website1もIDプロバイダーにしない限り。その場合でも、トークンが必要な場合はwebsite2をIDプロバイダーにリダイレクトする方がよいでしょう。
  3. 第二に、ユーザーがwebsite1の閲覧を1時間続けてからwebsite1に移動した場合。その時点で、website1セッションはタイムアウトしているため、ユーザーにはログインページが表示されます。 -それは、website1の設定方法と、認証Cookieの有効期間によって異なります。
  4. ただし、この動作はシングルサインオン機能ごとに間違っています。いいえ、ちがいます。シングルサインオンは、サイト間で共有されるフローティングトークンを取得することを意味しません。シングルサインオンを使用する各Webサイトは、独自の認証Cookieを作成します。ユーザーがwebsite1に戻って期限切れの認証Cookieを検出すると、ユーザーは再度シングルサインオンページに送信され、そこで(サイレントに)認証され、新しいトークンがwebsite1にプッシュバックされ、新しいトークンが作成されます自身の認証Cookie。

他のヒント

Microsoftの公式のアプローチは、Active Directoryフェデレーションサービス(SAMLをAD認証でラップする)によるものです。これはあなたが探している特徴を持っていますが、おそらく公開Webアプリケーションには重すぎます。

Active DirectoryなどでWindows認証を使用したくないと仮定しています。1つの方法は、説明したように、クエリ文字列のセキュリティトークンを使用して、1つの認証済みセッションから別のセッションに引き渡すことです。

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

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

通常、セキュリティトークンにはユーザーIDとタイムアウトが含まれ、タイムアウトが期限切れになった場合、ログインチェッカーはユーザーIDまたはnullを返します。

適切かつ安全にコーディングするための迅速な解決策ではありません。おそらく、コードプロジェクトでビルド済みのものを見つけることができますか?

アプリケーションに基づいて、アプリケーションごとに異なるSSOメカニズムを使用できます。

ただし、" アウトオブボックスSSO " Live、Google、Yahoo、Facebookなどのサービスを使用して、SAMLをサポートすることで認証を提供します。これにより、独自のSSOサービスの実装を維持する問題を取り除くことができます。

SSOの仕組みについて基本的な理解が必要な場合は、こちら

MSは数年前にエンタープライズ内でそれについて論文を発表しました-サンプルをセットアップしましたが、実際には実装しませんでした-シングルサインオン

OAuthおよびソーシャルプロバイダーを使用してこのリンクをチェックしてください。既に.Netに組み込まれている多数の認証機能を提供しています。 OAuthおよびソーシャルプロバイダーでのシングルサインオンに関するマイクロソフトトレーニングビデオ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top