キューに登録されたコンポーネントのセキュリティ
キューに登録されたオブジェクトに対してクライアントがメソッド呼び出しを行うと、実際にはレコーダーに対して呼び出しが行われ、メッセージの一部としてサーバーにパッケージ化されます。 リスナーは、キューからメッセージを読み取り、プレーヤーに渡します。 プレーヤーは、実際のサーバー コンポーネントを呼び出し、同じメソッド呼び出しを行います。 サーバー コンポーネントは、プレーヤーがメソッド呼び出しを行うとき、(プレーヤーのセキュリティ呼び出しコンテキストではなく) クライアントのセキュリティ呼び出しコンテキストを監視する必要があります。 レコーダーは、クライアントのセキュリティ呼び出しコンテキストをメッセージにマーシャリングし、プレーヤーはメソッド呼び出しを行う前にサーバーでマーシャリングを解除します。 サーバー オブジェクトに関する限り、クライアントからの直接呼び出しとプレーヤーからの間接呼び出しのセキュリティ コンテキストに違いはありません。 特に、呼び出されるメソッドは送信者の権限で実行されます。
COM+ キューに登録されたコンポーネントは、COM+ アプリケーションで使用するために構築された他のコンポーネントと同様、ロール ベースのセキュリティ セマンティクスをサポートします。 そのため、キューに登録されたアプリケーションのコンポーネントは、プログラム インターフェイスを使用して、呼び出し元 (ISecurityCallContext::IsCallerInRole) または特定のユーザー (ISecurityCallContext::IsUserInRole) のロール メンバーシップを検出することができます。 セキュリティへの潜在的な影響を持つキューに登録されたコンポーネントで、これらのインターフェイスを使用して、送信者の資格情報を明示的にチェックすることをお勧めします。
呼び出し元 ID は、メソッド呼び出しに関連付けられている ID です。 呼び出し元 ID は、ロール ベースのセキュリティによって使用され、セキュリティ呼び出しコンテキストに存在します。 キューに登録されたコンポーネントでは、呼び出し元 ID はメッセージ キュー メッセージのデータとして表されます。 メッセージ キューは、メッセージ送信者 ID を認証します。 呼び出し元 ID とメッセージ送信者 ID が同じ場合、メッセージ キューはメッセージと呼び出し元の両方を認証します。 これはよくある事例です。
Note
COM+ キューに登録されたコンポーネントは偽装スタイルのセキュリティをサポートしていません。これにより、サーバーはクライアント ID に対応するアクセス トークンを取得し、それを使用してアクセス制御チェックを実行したり、クライアント セキュリティ コンテキスト下で動作したりできるようになります。
キューに登録されたコンポーネントの呼び出し元がアウトプロセス レコーダーを介してコンポーネントと対話しているとき、呼び出し元とメッセージ送信者 (レコーダー) の ID が異なることがあります。 この場合、COM+ キューに登録されたコンポーネントは、メッセージ送信者がサーバー上の QC の信頼されたユーザー ロールのメンバーであることを確認します。 加えて、メッセージ キューによって認証されるため、アウトプロセス レコーダーには認証証明書が必要です。
QC の信頼されたユーザー ロールのメンバーは、任意の ID を指定することができます。つまり、悪意のあるメンバーは、キューに登録されたコンポーネント呼び出しを、昇格された権限で実行する可能性があります。 そのため、このようなユーザーの数は絶対最小値に保持することをお勧めします。
ネットワーク全体に ID を伝達するメカニズムに関連する高度な攻撃のリスクと、実行不可能な要求によってキューがあふれる単純なサービス拒否攻撃のリスクがあるため、COM+ キューに登録されたコンポーネント サービスは、信頼されたホストのネットワーク (たとえば、プライベート ネットワークや仮想プライベート ネットワーク上、または適切に構成されたファイアウォールの内側など) にのみデプロイすることをお勧めします。
COM+ キューに置かれたコンポーネントは DCOM 上で実行されるため、キューに登録されたアプリケーションのプロパティ シートの [セキュリティ] タブにある [呼び出しの認証レベル] 設定として [パケット プライバシー] を選択することにより、キューに登録されたメソッド呼び出しの整合性と機密性を保護できます。
関連トピック