WCF WebApiPreview6で構築されたRESTAPIに取り組んでいます。これはマルチテナントアプリケーション用であり、さまざまなクライアント(Webおよびモバイルアプリケーション)によって使用されます。
このAPIには、それらにアクセスしたり操作したりするために認証を必要とする特定のリソースがあります。これらのエンドポイントのAPIへの情報は、デバイス、ユーザー、テナントなどに関する暗号化された情報を含む暗号化されたトークンを使用して、クライアントによって提供されます。
テナント間のデータ漏洩を実際に明らかにするストレステストを作成しました。具体的な例とワークフローについて説明しますので、より良いアイデアが得られます。
クライアントデバイスのユーザーはAPIで認証し、トークンを取得します。その後、デバイスは、セキュリティトークンの動作を必要とするエンドポイントにリソースをPOSTします。トークンの検証はMessageHandlerで行われ、すべてが正常であることを確認してから、一時的な情報をHttpCurrent.Itemsに入れて、残りのリクエストで利用できるようにします。
HttpContext.Current.Itemsを使用するのは、それがリクエストにスコープされていることが確実だったためです。後でリクエストを処理するときに、適切なテナントを参照してそこに情報を挿入できます。
何が起こっているのかはわかりませんが、HttpContext.Current.Itemsの情報に基づいて、一部のデータが間違ったテナントにルーティングされます。
これはどのように起こりますか?
リクエストが終了する前に、HttpContext.Current.Itemsの情報が踏まれていますか?データを処理するプロセスは実際にはリクエストの範囲外ですか?