0

以下のSOAP呼び出しは、私の資格情報を使用して正常に機能しますが、他の人がWCFサービスを呼び出す私の.EXEを使用すると、401が拒否されます。渡されたクレデンシャルを調べようとしています。

IISログを見ることができましたが、プログラムでそれを実行しようとしています。ありがとうございます。

   public static Guid GetServerID(string serverName, string soapUrl)
    {
        Guid result;
        try
        {
            Guid vServerId = new ControllerWS.Controller
            {
                Url = soapUrl,
                Timeout = Config.SoapCallTimeOut,
                Credentials = CredentialCache.DefaultCredentials
            }.GetServerId(serverName);
            result = vServerId;

            //Console.WriteLine("CredentialCache.DefaultCredentials: " + CredentialCache.DefaultCredentials.ToString());
            //ICredentials Credentials = CredentialCache.DefaultCredentials.GetCredential()
        }
4

2 に答える 2

1

使用している認証の種類によって異なります。なりすましのあるWindowsクレデンシャルの場合、次のようなユーザー名を取得できます。

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name

プレーンなユーザー名とパスワードを使用している場合、これらの値をリクエストヘッダー内に保存して、次のように読み取ることができます。

MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;
string userId = headers.GetHeader<Guid>("MyKey", "MyNamespce");
于 2012-12-23T21:39:07.620 に答える
0

サーバー側でIDispatchMessageInspectorを使用して、ヘッダーを含む完全なメッセージをインターセプトできます。そこから、渡されている資格情報を調べることができます。

これは、メッセージインスペクターからの完全なメッセージをログに記録する方法の概要を示すブログ投稿です。これには、メッセージを接続するために必要な構成手順が含まれます。

于 2012-12-22T03:23:04.817 に答える