2

現在、バックエンド インフラストラクチャに取り組んでおり、アドバイスが必要な場合があります。

まず、現在のグローバル アーキテクチャは次のとおりです。

  • IIS でホストされている WCF サービスがあります
  • SQL Server でホストされている複数のデータベースがあります。クライアントごとに 1つのClientDataデータベースと 1 つのグローバルMasterDatabase.
  • MasterDatabase接続文字列に関連付けられた資格情報のマッピングが含まれています。そのデータベースによりClientData、提供された資格情報に応じて (Entity Framework 経由で) 適切なデータベースを使用できます。
  • SSL経由でBasic認証を使用しています。
  • 資格情報の検証はcheckAccessCore()ServiceAuthorizationManagerサブクラスのオーバーライドされたメソッドで行われます。そのメソッド内で fetchMasterDatabaseを実行し、資格情報が正しいことを確認し (パスワードは Bcrypt を使用して DB に保存されます)、接続文字列を取得します。
  • 接続文字列が取得されたら、CustomIdentityから継承するクラスのインスタンスを作成しますGenericIdentity。そのインスタンスを使用して、Thread.CurrentPrincipalプロパティを設定できます。
  • 各 WCF サービス実装はCustomPrincipal、適切なデータベースからデータをフェッチするために、から接続文字列を取得しClientDataます。

私の質問/考えは次のとおりです。

  1. CheckAccessCoreWCF サービスで同時実行を使用することにした場合、それは同時操作を順次実行する WCF 拡張機能のメソッドであるため、どのように処理すればよいでしょうか?

    http://support.microsoft.com/kb/KbView/2907010

    これは、すべての呼び出しがキューに入れられ、checkAccessCoreレベルでブロックされることを意味します。

    オーバーライドcheckAccessCoreは、ユーザーの資格情報を確認するためにコール スタックの早い段階で呼び出しをインターセプトする最良の方法です。

  2. カスタム ID 以外でクライアント接続文字列を転送する別の方法を使用する必要がありますか? 安全ですか?

CustomPrincipal同時実行を使用すると、に設定された IDがオーバーライドされると思います。はいの場合、それをどのように処理しますか?

4

0 に答える 0