2

WCF、ストリーミング、セキュリティに最大の問題ではない問題がありますが、それを回避する方法について人々の考えを聞きたかったのです。

クライアントがサーバーにファイルをアップロードできるようにする必要があります。これは、BasicHttpBindingのtransferMode="StreamedRequest"機能を使用して許可しています。彼らがファイルをアップロードするとき、私はこのファイルをファイルシステムにトランザクション的に配置し、ファイルのメタデータでデータベースを更新したいと思います(私は実際にこれをネイティブにサポートするSql Server 2008のFILESTREAMデータ型を使用しています)。WCF Windows認証を使用しており、すべてのデータベース認証のためにKerberosクレデンシャルをSQLServerに委任しています。

問題は、私が参考になる例外として、「HTTPリクエストストリーミングをHTTP認証と組み合わせて使用​​することはできない」ということです。そのため、アップロードファイルサービスの場合、メッセージ呼び出しと一緒にWindows認証トークンを渡すことができません。SQL Serverログインを使用していなくても、Windowsのクレデンシャルで呼び出し元のクライアントを特定することさえできませんでした。

アップロードメソッドをセキュリティで保護せずに、ファイルを一時ストアにダンプしてロケーターGUIDを返すようにすることで、これを一時的に回避しました。次に、クライアントは安全な非ストリーミングサービスに2回目の呼び出しを行い、GUIDを渡します。GUIDは、Windows認証を使用して一時ストアからデータベースにファイルをアップロードします。

明らかに、これは理想的ではありません。パフォーマンスの観点から、私はディスクへの追加の読み取り/書き込みを行っています。スケーラビリティの観点から、(原則として、ロードバランサーを使用して)後続の2つの呼び出しで同じサーバーにアクセスするという保証はありません。つまり、一時ファイルストアは共有の場所にある必要があり、スケーラブルな設計ではありません。 。

誰かがこの状況に対処するためのより良い方法を考えることができますか?私が言ったように、それは最大の取引ではありません。なぜなら、a)私は実際にこれをあまりスケールアウトする必要がなく、ユーザーがあまり多くない、そしてb)これらのアップロード/ダウンロードが頻繁に呼び出されるようではないからです。しかし、それでも、ここで明らかな解決策が欠けているかどうかを知りたいです。

ありがとう、ダニエル

4

0 に答える 0