我有一个我正在尝试运行的基本 ASMX 服务(我宁愿使用 WCF,但无法让服务器使用它)。它在没有安全设置的情况下运行良好,但是一旦我打开安全性,我就会得到:
HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“基本领域=“安全区域”。
我想要的是一个简约的询问用户名称和密码类型的解决方案。
用智能感知浏览代码并没有找到我需要的任何东西。
这看起来可能很有用,但它似乎是 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# 命令行应用程序。此外,身份验证是由我无法控制的另一个 IIS 插件完成的。
编辑2:要清楚;我正在寻找的解决方案是纯粹的客户端问题。
编辑 3:访问控制是通过一种.haccess
系统进行的,我喜欢这种方式。我不希望服务代码进行任何身份验证。