-1

SSO と Windows 認証を使用する MVC で記述された Web フロントエンドがあり、このフロントエンドは、特定の AD サービス アカウントで実行するように構成されたバックエンド WCF サービス レイヤーに接続します。

データベース サーバーへの接続が信頼されており、web.config にパスワードがなく、サービス アカウントが DB サーバーに対する適切な権限を持っているため、WCF サービス レイヤーが SQL Server に接続できるため、このアプローチが気に入っています。 't そして、彼らはすべきではありません。

私が今探しているのは、WCF サービスがクライアントから接続しているユーザー ID を識別し、アプリケーション レベルでセキュリティ ルールを検証できるようにする方法です (私たちは Visual Guard セキュリティ フレームワークを使用しています)。 EF を使用して SQL に接続する場合は、現在のサービス アカウントを使用する必要があります。

私がこれまでに行ったことは次のとおりです。

Web フロントエンドで WCF クライアントを作成すると、次のようになります。

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
  var client = new RPPServiceInterface().GetRWSService();
  ...
}

上記の呼び出しを導入した瞬間から、Impersonate以下のコードでは、サービス アカウントではなく、クライアント ユーザーを取得できます。

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public List<RWSProgram> GetCedentsPrograms(int cedentID, int uwYear)
{
  var currentSec = ServiceSecurityContext.Current;
  ...
}

私がやりたいことは、セキュリティを検証するためのクライアント ID と、何らかの形でその ID を解放すること、またはサービス レイヤーでサービス アカウントを偽装して SQL 接続を開く別の方法を用意することです...何か考えはありますか? 私は何か間違ったことをしているのですか、それとも全体像を誤解していますか?

PS私はすでにこれをチェックしましたが、助けにはなりませんでした.... WCFサービスの二重偽装?

ありがとう、ダビデ。

4

1 に答える 1

1

これはあなたが探しているものですか?:

// ...Service operation code impersonating a client here

using (WindowsImpersonationContext processContext = WindowsIdentity.Impersonate(IntPtr.Zero))
{
    // Database access stuff here
    // Within the using block the client is no longer impersonated:
    // context reverts to the identity running the service host process
    // (I'm assuming this is what you call your service account)
}

// Ensuing code impersonates the client as previously...
于 2012-07-22T08:31:38.553 に答える