私の要件は、asp.net で SAML2.0 を使用して SSO を実装することです。私は最後に2つのベンダーを持っています。2番目のサイトにログインせずに、あるサイトから別のサイトにユーザーを渡したい. 以前に SAML2.0 を使用したことがありません。どうすればそれを成し遂げることができますか?
5 に答える
まず、トークン形式でプロトコルを区別しましょう。トークン形式ではなく、プロトコルについて話していると思います。ただし、念のために違いを次に示します。
- SAML 2 トークン形式。これは単に、アプリケーションが使用するトークンの形式です。これは、すぐに使用できる WIF によってサポートされています。
- SAML 2 プロトコル。これは、アプリでトークンを取得するためにアプリケーションが理解する必要がある HTTP 対話です。これは WIF ではサポートされていませんが、ダウンロードできる拡張機能があります ( http://connect.microsoft.com/site116 8/Downloads/DownloadDetails.aspx?DownloadID=36088 )
一方、複数の ID プロバイダーが存在するシナリオがあります。Wiktor が提案した本 (私が共著) では、複数のパートナーによるフェデレーション ID の章で、このシナリオについて詳しく説明しています。ID フェデレーションの背後にある概念を理解するために読むことをお勧めします。記事の短いバージョンと実装の詳細をいくつか紹介します。これを解決するには、次の 2 つの方法があります。
アプリケーションレベルで実装します。WIF では、複数の ID プロバイダー トークンを信頼できます (これは X509 証明書で行われます)。次に、URL ( https://idp1.yourapp.comやhttps://yourapp.com/idp1など) またはユーザーの選択 (ホームページに2 つのリンク (ID プロバイダーごとに 1 つ)。また、これらの ID プロバイダーからのクレームを正規化する必要があります (そのうちの 1 つが "name" クレームを送信し、もう 1 つが "upn" クレームを送信する場合があります)。
YourApp --> Identity Provider 1 \-> Identity Provider 2
「フェデレーション プロバイダー」と呼ばれるものを使用します。これは、アプリケーションにトークンを発行する別のサーバーであり、ID プロバイダーに対して信頼関係を持ちます。アプリケーションが 2 つの ID プロバイダーを信頼する代わりに、フェデレーション プロバイダーのみを信頼し、フェデレーション プロバイダーは ID プロバイダーを信頼します。それは信頼チェーンです。
YourApp --> Federation Provider --> Identity Provider 1 \-> Identity Provider 2
このアーキテクチャにより、次のことが可能になります。
- アプリケーションに手を加えることなく ID プロバイダーを拡張
- 後で2番目のアプリケーションがある場合は、最初のアプリケーションの実装をコピーするだけです
- シングル サインオンを無料で利用できます
- クレーム変換エンジンを取得します (ADFS などを使用する場合)
- ADFS のようなものを使用すると、SAML 2 プロトコルが組み込まれます (後述の拡張機能を使用して手動で実装する必要はありません)。
もちろん、欠点は、管理するものが他にあることです (ADFS サーバー)。
ASP.NET アプリで使用する非常にシンプルなオープンソース C# コンポーネントを作成しました: https://github.com/jitbit/AspNetSaml (コード サンプルを含む)
それは非常に短く基本的なものですが、それが目標でした。巨大なサードパーティ パッケージを追加する代わりに、1 つの短い C# ファイルをプロジェクトに投入するだけで、SAML 対応になります。このことは、.NET 3.x でも何年もの間機能してきました
【免責事項】 私は寄稿者の一人です。
PS。フォークとコントリビューションは大歓迎です。
SAML ベースの認証の処理を簡素化する Windows Identity Foundation サブシステムを使用することをお勧めします。
トピックはかなり広いので、優れたハンドブックが必要です。幸いなことに、MS から無料で入手できるハンドブックがあります。
http://msdn.microsoft.com/en-us/library/ff423674.aspx
つまり、2 つのサーバー間で ID を渡すには、そのうちの 1 つは ID プロバイダー サービス (セキュリティ トークン サービス) を実装し、2 番目のサーバーは最初のサーバーによって作成および署名された SAML トークンを受け入れる必要があります。
ComponentSpace の使用をお勧めします。SAML 2.0 トークンと SAML 2.0 プロトコルのすべてのユースケースに適合するライブラリを提供します。WIF は現在、CTP を除き、SAML 2.0 プロトコルとトークン形式をサポートしていません。