2

リモートDBを管理するために小さなRESTサーバーを実装する必要がありますが、特別なことは何もありません。このサーバーはイントラネット環境で実行する必要があるため、セキュリティは重要な問題ではありません。ユーザーをフィルタリングして適切なリソースにリダイレクトするだけです。

        HttpListener listener = new HttpListener();
        listener.Realm = "testserver1";
        listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

        foreach (string s in prefixes)
        {
            listener.Prefixes.Add(s);
        }

        listener.Start();
        Console.WriteLine("Listening...");

        HttpListenerContext context = listener.GetContext();

        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        string responseString = "<HTML><BODY>" + DateTime.Now.ToString() + "</BODY></HTML>";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);

        response.ContentLength64 = buffer.Length;
        System.IO.Stream output = response.OutputStream;
        output.Write(buffer, 0, buffer.Length);
        output.Close();

        listener.Stop();

このコード (Microsoft のサイトから取得) はサーバー側から完全に機能し、listener.GetContext()が返されたときに、User オブジェクトからユーザー名とパスワードを確認し、リクエストの処理方法を確立できます。最初のlistener.AuthenticationSchemes = AuthenticationSchemes.Basicを変更します

listener.AuthenticationSchemes = AuthenticationSchemes.Digest

期待どおりに機能しなくなり、基本認証スキーマが効果的に機能しなくなります。listener.GetContext()呼び出しは戻りません。HttpListener はすべてのリクエストをブロックするように見え、クライアント側からは引き続きユーザー名とパスワードの入力を求められます。ローカル ユーザー、ローカル管理者、ドメイン ユーザー、ドメイン管理者、約 500 のファンタジー名を試しましたが、何も機能しません。GetContext() はもう戻りません。手伝って頂けますか?

前もって感謝します。

L.

4

2 に答える 2

1

に割り当てられる値listener.Realmは、認証に使用される Windows ドメインの名前でなければなりません。「testserver1」はドメイン名のようには見えません。

于 2016-06-01T12:00:32.950 に答える