web-dev-qa-db-ja.com

asp.netでSAML2.0を使用するSSO

私の要件は、asp.netでSAML2.0を使用してSSOを実装することです。私の側には2つのベンダーがあります。 2番目のサイトにログインせずに、あるサイトから別のサイトにユーザーを渡したい。私はこれまでSAML2.0を使用したことがありません。誰かが私がそれを成し遂げる方法を手伝ってくれる?.

12
dipa

まず、プロトコルをトークン形式で区別しましょう。トークン形式ではなく、プロトコルについて話していると思います。しかし、念のためここに違いがあります:

  • SAML2トークン形式。これは、アプリケーションが理解できるトークンの形式にすぎません。これは、WIFですぐにサポートされます。
  • SAML2プロトコル。これは、アプリでトークンを取得するためにアプリケーションが理解する必要のあるHTTPインタラクションです。これはWIFではサポートされていませんが、ダウンロードできる拡張機能があります( http://connect.Microsoft.com/site116​​8/Downloads/DownloadDetails.aspx?DownloadID=36088

一方、複数の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
    

このアーキテクチャにより、次のことが可能になります。

  • アプリケーションに触れることなくIDプロバイダーを成長させる
  • 後で2番目のアプリケーションがある場合は、最初のアプリケーションの実装をコピーするだけです。
  • 無料でシングルサインオンを取得します
  • クレーム変換エンジンを取得します(ADFSなどを使用している場合)
  • aDFSのようなものを使用すると、SAML 2プロトコルが組み込まれます(以下で説明する拡張機能を使用して手動で実装する必要はありません)。

もちろん、欠点は、管理するものが他にあることです(ADFSサーバー)。

26
woloski

SAMLベースの認証の処理を簡素化するWindowsIdentityFoundationサブシステムを使用することをお勧めします。

トピックはかなり広いので、良いハンドブックが必要です。幸い、MSから無料でハンドブックがあります。

http://msdn.Microsoft.com/en-us/library/ff423674.aspx

つまり、2つのサーバー間でIDを渡すには、一方がIDプロバイダーサービス(セキュリティトークンサービス)を実装し、もう一方が最初のサーバーによって作成および署名されたSAMLトークンを受け入れる必要があります。

6
Wiktor Zychla

ASP.NETアプリで使用する非常に単純なオープンソースC#コンポーネントを作成しました: https://github.com/jitbit/AspNetSaml (コードサンプルを含む)

それは非常に短く基本的ですが、それが目標でした。巨大なサードパーティパッケージを追加する代わりに、1つの短いC#ファイルをプロジェクトにスローするだけで、SAMLに対応できます。このことは、.NET 3.xでも、何年にもわたって機能してきました。

【免責事項】私は寄稿者の一人です。

PS。フォークと寄付は大歓迎です。

4
jazzcat

ComponentSpaceの使用をお勧めします。これらは、SAML2.0トークンとSAML2.0プロトコルのすべてのユースケースに適合するライブラリを提供します。 WIFは現在、CTPを除いて、SAML2.0プロトコルとトークン形式のサポートを提供していません。

4
kshbondili