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