Я просто создаю свой первый проект WCF, поэтому у меня много недостатков в знаниях в этой области.Моя проблема в том, что когда я звоню по своей ссылке WCF в веб-браузере, мне нужно ввести учетные данные, но я даже не могу использовать свое доменное имя и пароль, но мне нужно выбрать свой личный сертификат чип-карты и ввести его пароль.После этого все работает как чудо.
Мой конечный продукт должен быть установлен на каждую пользовательскую рабочую станцию в нашем домене только для целей ИТ-операций.Так что после этого будет авторизация AD.О сертификате ... У нас есть собственный сертификат корневого CA компании, и каждая рабочая станция имеет свой собственный сертификат, который является его внуком:
Пример нашего дерева сертификатов:
COMPANYROOTCA >> COMPANYSUBCA1 >> WORKSTATIONNAME.DOMAIN (этот используется в качестве сертификата службы WCF)
Это то, что у меня есть сейчас для размещения WCF в моей службе Windows, работающей под учетной записью NetworkService:
serviceHost.Dispose(); //extension for close() and set to null
Uri httpsUrl = new Uri("baseAdress");
serviceHost = new ServiceHost(typeof(Service.myService), httpsUrl);
WSHttpBinding wsHttpBinding = new WSHttpBinding();
wsHttpBinding.Security.Mode = SecurityMode.Transport;
wsHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
wsHttpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
WebHttpBinding webHttpBinding = new WebHttpBinding();
webHttpBinding.Security.Mode = WebHttpSecurityMode.Transport;
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
webHttpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
ServiceMetadataBehavior smb = new ServiceMetadataBehavior
{
HttpGetEnabled = false,
HttpsGetEnabled = true,
};
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection collection = store.Certificates;
X509Certificate2 cert = collection.OfType<X509Certificate2>().First(c => c.SubjectName.Name == "CN=WorkstationName.Domain");
store.Close();
serviceHost.Credentials.ServiceCertificate.Certificate = cert;
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = 16,
MaxConcurrentInstances = 26,
MaxConcurrentSessions = 10
};
serviceHost.Description.Behaviors.Add(throttleBehavior);
ServiceEndpoint soapEndpoint = serviceHost.AddServiceEndpoint(typeof(Contract.IMyService), wsHttpBinding, "soap");
ServiceEndpoint restEndpoint = serviceHost.AddServiceEndpoint(typeof(Contract.IMyService), webHttpBinding, "rest");
ServiceEndpoint mexEndpoint = serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpsBinding(), "mex");
restEndpoint.Behaviors.Add(new WebHttpBehavior());
tempAdminHost.Open();
Итак, мой вопрос: Есть ли способ, например, как автоматически получить учетную запись домена, которая использует браузер, и назвать URL или любую другую альтернативу, какиспользовать HTTPS, но без указания учетных данных?