2009-06-09 23 views
0

私は、互いに話す必要があるいくつかの別々のコンポーネントを持つプロジェクトを持っています。私は今、各コンポーネント間でパーミッションシステムを共有する良い方法を見つけることを試みています。複合システムへの権限の追加

3主要なコンポーネントは次のとおりにいくつかのWCFのWebサービスを提供してい

  1. アンASP.Net Webアプリケーション
  2. (Webアプリケーションによって提供)Silverlightアプリケーション
  3. A Windowsサービス、 Silverlightアプリ。

サーバー(1,3)は両方とも同じデータベースにアクセスできます。各コンポーネント間の通信は、WCF Webサービスによって実行されます。

Windows Service(3)から情報を要求しているユーザーが誰でも、アクセスするための適切なアクセス権を持つユーザーであることを確認する必要があります。 Silverlight App(2)は、リクエストの送信先です。現時点では、Asp.Net App(3)から完全に分離されているため、Windows Service(1)で利用できるユーザー情報はありません。私はユーザー名とパスワードを保存して渡したくないので、ASP.Net App(1)のログイン時に一度だけ資格情報を入力するだけで済みます。

Windowsサービス(3)にユーザーIDを取得するには、どのような方法が良いですか?私が見

(私は以下の答えとして参照可能性を投稿します。)

答えて

0

一つの可能​​性は、ユーザー識別用のASP.NetアプリケーションからセッションIDの周りに渡しています。

Silverlightアプリケーション(2)がAsp.Net(1)から提供される場合、セッションIDが渡される可能性があります。 Silverlight app(2)がWindowsサービス(3)に要求を行うと、セッションIDをパラメータとして渡すことができます。 Windowsサービス(3)は、Asp.Net app(1)によって公開されているWCFサービスを使用して、指定されたセッションIDのユーザーIDを照会することができます。

ここに潜在的なセキュリティ上の欠陥はありますか?セッションIDを乗っ取ることができる人がいれば、Silverlightアプリケーションに渡されるかどうかにかかわらず、公開され、ハイジャックされるようです。

1

私にとっては、ASPログインの認証情報(ユーザー)を使って渡すことにしました。このオブジェクトは自動的にすべてのASP.NET Webページに渡されるため、Windowsサービスを呼び出す必要があるときはいつでもすぐに利用でき、アクセス許可を簡単に確認することができます。

+0

私はそれを考えていましたが、ハイジャッカーがユーザーIDをWebサービスに渡してユーザーになりすますのは簡単すぎると思います。 セッションIDと同様の状況ですが、セッションIDは時々変更されるべきですが、ユーザーIDは一定のままです。 – grimus

+0

Userオブジェクトは単なるユーザーIDではなく、ログイン時に作成されたメモリ内オブジェクトです(おそらくセッションに格納されますが、必ず読み上げてください)。少なくともセッションIDと同じくらい安全で、簡単に注射できるわけではありません。 –

1

SilverlightとASP.NET間の呼び出しを保護するには、ASP.NET認証メカニズムをSilverlightに公開するASP.NETアプリケーションサービスを使用します。 Silverlightアプリケーションは、その後のASP.NET呼び出しのセッション情報を維持します。これまで、ASP.NETアプリケーションでWCFサービスを作成し、PrincipalPermission属性(http://msdn.microsoft.com/en-us/library/ms731200.aspx)を使用して、Silverlightで提供されたログイン情報を使用してWCFサービスメソッドを保護していました。このシナリオは完璧に機能し、セッションIDやユーザー名を示す文字列(推奨しません)を渡すなど、独自のセキュリティメカニズムを作成する必要はありません。私は、このセットアップは複数のサーバー間でもうまくいくと思いますが、WindowsサービスでWCFサービスをホストすることがセキュリティにどのように影響するかはわかりません。この2つの間に何らかの偽装を可能にする方法があるかもしれません。間違いなく#1と#2のセキュリティを確保するためにASP.NETアプリケーションサービスを検討し、IISでWCFサービスをホストすることができれば、ごくわずかな作業ですべての要件を満たすことができます。

関連する問題