Tôi đang cố tạo một dịch vụ web bảo mật.Yêu cầu HTTP bị cấm với lược đồ xác thực ứng dụng khách 'Ẩn danh'. Máy chủ từ xa đã trả về lỗi: (403) Bị cấm
Đây là hợp đồng và dịch vụ thực hiện
[ServiceContract()]
public interface ICalculatorService
{
[OperationContract()]
int Add(int x, int y);
}
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public class CalculatorService : ICalculatorService
{
public int Add(int x, int y)
{
return x + y;
}
}
Ở đây tôi có mã dịch vụ
var b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
b.Security.Message.ClientCredentialType = MessageCredentialType.None;
Type contractType = typeof(ICalculatorService);
Type implementedContract = typeof(CalculatorService);
Uri baseAddress = new Uri("https://localhost:8006/CalculatorService");
ServiceHost sh = new ServiceHost(implementedContract);
sh.AddServiceEndpoint(contractType, b, baseAddress);
//ServiceMetadataBehavior sm = new ServiceMetadataBehavior();
//sm.HttpsGetEnabled = true;
//sm.HttpsGetUrl = new Uri("https://localhost:8006/CalculatorServiceMex");
//sh.Description.Behaviors.Add(sm);
sh.Credentials.Peer.PeerAuthentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerTrust;
sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, X509FindType.FindBySubjectName, "localhost");
sh.Open();
Console.WriteLine("Service is Listening");
Console.ReadLine();
sh.Close();
Đây là mã khách hàng
var b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
b.Security.Message.ClientCredentialType = MessageCredentialType.None;
var factory = new ChannelFactory<ICalculatorService>(b);
factory.Credentials.Peer.PeerAuthentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerTrust;
factory.Credentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, X509FindType.FindBySubjectName, "localhost");
var client = factory.CreateChannel(new EndpointAddress(new Uri("https://localhost:8006/CalculatorService")));
ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) =>
{
return true;
});
ICommunicationObject comObject = client as ICommunicationObject;
int result = -1;
try
{
comObject.Open();
result = client.Add(10, 2);
}
catch (Exception ex)
{
}
Console.WriteLine(string.Format("Service say 10 + 2 = {0}", -1));
Console.ReadLine();
Dịch vụ này chạy tốt và khi ServicePointManager.ServerCertificateValidationCallback kiểm tra được thực hiện không có lỗi chính sách , với chuỗi chứng chỉ chính xác được tạo.
Tôi có CA của tôi trong thư mục gốc đáng tin cậy và các CERT server/client trong cửa hàng TrustedPeople. Ngoài ra nếu tôi điều hướng đến trang web từ trình duyệt, tôi thấy một trang được trả lại. Không có lỗi
Tôi đã cập nhật IIS với những gì tôi nghĩ là những yêu cầu, ràng buộc các chứng chỉ trong trong IIS
và thông qua dòng lệnh dưới đây.
tôi đã thiết lập các cài đặt SSL để chấp nhận chứng chỉ
và kích hoạt xác thực nặc danh.
Có ai biết những bước nào tôi đã không thực hiện đúng hoặc thấy bất kỳ điều gì không ổn? Tôi tiếp tục gặp lỗi tương tự "Yêu cầu HTTP bị cấm với lược đồ xác thực ứng dụng khách 'Ẩn danh'."
Tôi đã gặp phải ngoại lệ này nhưng đó là do chứng chỉ ssl của tôi hết hạn. –
Có bất kỳ thay thế cho IIS cho WCF. Tôi HATE IIS, một ngày nó hoạt động và tiếp theo nó bắt đầu đưa ra tất cả các loại lỗi mất cả ngày để giải quyết. –