2

私は、当社の製品に SSO を実装する方法を見つけることを任されています。いくつかの Winform アプリケーションと 1 つの asp.net 4.0 Web アプリ (MVC ではない) があります。

すべての製品は .Net 4.0 を使用して構築されており、Web アプリは ASP.NET 4.0 です。一部の Winform は Web サービス (asmx) を介して API と通信し、一部は API を直接使用します。Web アプリも同じ API を使用しています。同じ API を使用する一連の Web サービス (asmx) を外部クライアントに提供します。

現在、システムには独自の認証実装 (ユーザー、パスワード、ロール) があり、それを SSO に置き換えたいと考えています。それとも、これら 2 つの認証制度は何らかの形で共存できるのでしょうか? Winforms はイントラネットで使用され、Web アプリはイントラネットの両方で使用され、クライアント (インターネットからアクセス可能) 用の Web アプリもホストします。

ユーザーは当社のシステムで作成されますが、同時に独自のツールを使用して Active Directory からユーザーをインポートします。Active Directory は実際には主要なユーザー ソースです。

Windows Identity Foundation について読んだことがありますが、それを使用して SSO を実装できるかどうか疑問に思っています。しかし、私が理解していないのは、API を直接使用するときに winform アプリケーションで WIF を使用する方法です。

私が達成したいことは、システムからすべてのユーザー管理を取り除き、Active Directory をユーザー ソースとして使用することです。これは、ADFS 2.0 を使用してクレームなどを作成することを意味していると思います。

この実装では .Net Framework 4.5 を使用できます (WIF が .Net Framework 4.5 の第一級市民になったことはわかっています)。

これを行う方法に関するアドバイスはありますか?WIF は、winforms アプリケーションと Web アプリで SSO を実現するための最良の代替手段ですか?

4

1 に答える 1

7

WinForms アプリケーション内から WIF 認証 Cookie を取得する方法があります。

これを行うには、コントロールをホストし、WebBrowserそれを Web アプリケーションのログイン ページにポイントするだけです。Web アプリケーションが ADFS2 とフェデレーションされていると仮定すると、Web ブラウザー コントロールは自動的にフローに従います。ADFS にリダイレクトし、そこで停止して、ユーザー資格情報のプロンプトを表示するか (フォーム認証モードの ADFS2)、NTLM/Kerberos を使用して認証するだけです ( Windows 認証モードの ADFS2)。次に、Web ブラウザーがアプリケーションにリダイレクトされます。

これは、コードをフックする場所です。Web ブラウザーのナビゲーション イベントにハンドラーを追加するだけで、ADFS2.0 がユーザーを認証した後、ハンドラーがアプリケーションに戻ってくるタイミングを確認できます。InternetGetCookie次に、WinForms アプリでメソッドを呼び出して、アプリケーションによって発行されたすべての認証 Cookie を取得し、Web ブラウザーをホストするウィンドウを閉じることができます。

この時点で、SessionAuthenticationModuleアプリケーション用に WIF ( ) によって発行されたすべての認証 Cookie があります。アプリケーション Web サービスを呼び出して、HTTP 呼び出しに Cookie を挿入できるようになりました。Web サーバーはユーザーを認証済みとして正しく認識します。つまり、Web サービスに適切な承認を追加するだけです ( PrincipalPermissionWeb メソッドで行う必要があります)。

もう 1 つの方法は、Web アプリケーションから WCF サービスを公開し、WS-Federation アクティブ認証でそれらを保護することです。このアプローチの欠点は、(私の意見では) ID プロバイダー (ADFS) が、WS-Trust/WS-Federation を必ずしも実装していない別の ID プロバイダーとさらにフェデレーションされている場合、アクティブな認証がおそらく失敗することです (他のパッシブ シナリオは引き続き機能します (一連のリダイレクトは遅かれ早かれ、ユーザーに資格情報の提供を要求するページで終了しますが、連続する ID プロバイダー間の認証プロトコルの流れは重要ではありません)。

于 2012-11-27T12:33:56.420 に答える