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サービスの二重偽装?
ありがとう、ダビデ。