0

現時点では、Asp.net MVC アプリケーションで使用される WCF サービスを使用しています。

セキュリティ上の理由から、ユーザー名とパスワードを表す GUID を使用しています。(ユーザーがログインすると、WCF は Active Directory の資格情報をチェックし、GUID をユーザー名とパスワードに接続するデータベース テーブルにレコードを作成します) ユーザーが別のサービスを使用するときは、この GUID をヘッダーと共に送信します。この GUID を使用して、wcf でユーザーを偽装したいと考えています。次のことを(authorizationManagerを使用して)試しましたが、うまくいきません。

 public class MyAuthBehaviour :ServiceAuthorizationManager
    {
        public override bool CheckAccess(OperationContext operationContext, ref Message message)
        {

            var index = operationContext.IncomingMessageHeaders.FindHeader("identifier", "");

            if (index >= 0)
            {
                string identifier = operationContext.IncomingMessageHeaders.GetHeader<string>(index);
                AddWindowsID(identifier);
            }           
            return true;
        }

        private void AddWindowsID(string identifier)
        {
            WindowsIdentity wid = AccountBL.GetWindowsIdentity(identifier);
            wid.Impersonate();
        }      
    }

WindowsIdentity は取得できますが、偽装できません。これを行う方法はありますか?

簡単に言うと、ヘッダーの GUID を使用して実際のサービス メソッドに到達する前に、WCF 内でユーザーになりすます必要があります。

wid.Impersonate() がヒットすると、クライアントは次の例外をスローします。

内部エラーのため、サーバーは要求を処理できませんでした。エラーの詳細については、サーバーで (ServiceBehaviorAttribute または構成動作のいずれかから) IncludeExceptionDetailInFaults をオンにして、例外情報をクライアントに送り返すか、Microsoft .NET Framework SDK ドキュメントに従ってトレースをオンにして、サーバーのトレース ログを調べます。

WCF は実行を続けます (ただし、WCF サービスで trown が発生する場合は例外です)

wid.Impersonate() が実行されたときに例外はスローされず、 MyAuthBehaviour クラスを離れるときに発生します

4

0 に答える 0