実行しようとしている基本的な ASMX サービスがあります (WCF を使用したいのですが、サーバーで動作させることができません)。セキュリティなしのセットアップでは問題なく動作しますが、セキュリティをオンにするとすぐに次のようになります。
HTTP 要求は、クライアント認証スキーム「匿名」では許可されていません。サーバーから受信した認証ヘッダーは、「基本レルム="セキュア領域"」でした。
私が欲しいのは、ユーザーに名前とパスワードの種類の解決策を最小限に求めることです。
IntelliSense でコードを調べてみても、必要と思われるものは何も見つかりません。
これは便利なように見えますが、WCF のようです。
これをライブデモにできることに気づきました:
ここにサービスがあります:http://smplsite.com/sandbox3/Service1.asmx
ユーザー名はtestapp
で、パスワードはtestpw
です。そのサービスで関数を呼び出すコマンド ライン アプリが必要です。
セキュリティを追加する前に、この行はAdd Web Service Reference
その URL で実行した後、基本的な VS プロジェクトで機能しました
new ServiceReference1.Service1SoapClient().HelloMom("Bob");
これは私の現在の試みです(うまくいきません)
class Program
{
private static bool customValidation(object s, X509Certificate c, X509Chain ch, SslPolicyErrors e)
{ return true }
static void Main(string[] args)
{
// accept anything
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(customValidation);
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Transport.Realm = "Secured area";
// the generated Web Service Reference class
var client = new ServiceReference1.Service1SoapClient(
binding,
new EndpointAddress("https://smplsite.com/sandbox3/Service1.asmx")
);
client.ClientCredentials.UserName.UserName = "testapp";
client.ClientCredentials.UserName.Password = "testpw";
Console.WriteLine(client.HelloMom("Bob"));
}
}
編集:ところで、これはウェブサイトでもブラウザで実行されているものでもありません。アクセスコードはC# command line app です。また、認証は、私が制御していない別の IIS プラグインによって行われています。
編集2:明確にするために。私が探している解決策は、純粋にクライアント側の問題です。
編集 3:アクセス制御は.haccess
一種のシステムを介して行われ、その方法が気に入っています。サービスコードで認証を行いたくありません。