WCF認証用のアプリケーション名の指定

.net-3.5 asp.net c# wcf
WCF認証用のアプリケーション名の指定

IISのそれぞれの仮想ディレクトリで、複数のクライアントに対して同じサービスをホストすることを考えています。 したがって、基本的にはディスク上に1つのサービスがあり、複数のIISホスト仮想ディレクトリによって参照されます。これにより、次のようなことができます。

http:// myservice / client1

http:// myservice / client2

…​etc

サービス契約を一般化します。 これにより、すべてのクライアントに1つの契約が与えられます。

基盤となるデータベースはすべてのクライアントで異なります(スキーマは同じです)。サービスにアクセスするために使用されるURLを見つけてクライアントの各データベースに接続します(http:// myservice / client1の場合)。 dbClient1、http:// myservice / client2の場合、dbClient2に接続します…​ etc

チャレンジ:

上記は、認証プロセス(ASPメンバーシップ、フォーム認証を使用しています)を除く、ほとんどの問題を解決します。 私のサービスはhttps basicHttpバインディング上にあるため、セッションはありません。

ユーザー認証に使用するアプリケーション名を指定するにはどうすればよいですか。 (すべてのクライアントに個別のアプリケーション名があり、1つのASPメンバーシップデータベースに格納されています)Application.AuthenticateRequestの下でGlobal.asaxを変更すると、その時点でURLを取得でき、認証中に使用するアプリケーション名を指定できるため、しかし、これは他の呼び出し元のアプリケーション名も変更します…​ 全然良くない…​.

したがって、必要なのは、そのデータベース内のこのアプリケーションの下でこのユーザー名/パスワードを検索するサービスを伝える方法です。 (データベースは、認証の場合、すべてのクライアントで同じになります)。 しかし、その特定のセッション/インスタンスのアプリケーション名の変更が必要です…​ (これら2つがhttps basicHttpバインディングで利用可能かどうかはわかりません)

私がこの問題を解決できれば、私はすべてうまくいくでしょう…​.

助けてください …​ ありがとう

  0  0


ベストアンサー

認証にASP.NETインフラストラクチャを使用しているようです。 どのようなMemberShipProviderを使用していますか? 現在のリクエストURLを使用してアプリケーション名を把握するカスタムプロバイダーを作成する必要があります。 たとえば、これは `SqlMembershipProvider`に基づいたものです。

public class MyMembershipProvider : SqlMembershipProvider
{

    public override string ApplicationName
    {
      get
      {
          var url = HttpContext.Current.Request.Url;
          // find out the application name from  url
      }
      set
      {
         base.ApplicationName = value;
      }
    }
}

0


タイトルとURLをコピーしました