У меня есть вопрос вокруг авторизации WCF с учетной записью домена через HTTP-трафика, размещенного на IIS (нет производства, так нет сертификата SSL не был доступен для использования через Интернет)службы WCF Выполняется авторизация с Active Directory - Access Denied Ошибка
I Мне хотелось бы узнать, как настроить проверку подлинности Windows с клиента на мою веб-службу. В настоящее время я тестирование на одной и той же локальной сети, прокси-серверы не проблема
Я включил список испытанных шагов в конце этого поста
Edit: Ошибка, которая происходит только доступ является denied, ничего другого, заданного с , попробуйте, поймайте в клиентском приложении. Если есть способ получить более подробную информацию, пожалуйста, дайте мне знать и плохо добавьте результат в сообщение.
службы WCF код:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
public class Data : IData
{
[PrincipalPermission(SecurityAction.Demand, [email protected]"Administrators")]
public List<Incident> GetCases()
{
Queries query = new Queries();
List<Incident> iList = query.CallCases();
return iList;
}
}
WCF Web Config Наручники:
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="None">
<message clientCredentialType="Windows" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
WCF Web Config Поведение:
<behavior name="Behaviour1">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="true" />
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="9577" /> ///This port is correct
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
WCF Web службы настройки:
<service behaviorConfiguration="Behaviour1" name="WebService1.Data">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="WebService1.IData">
<identity>
<dns value="demo.DomainName.co.uk" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
Client Application (Has Service ссылка добавляется)
DataClient client = new DataClient();
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand();
Console.WriteLine("Demand succeeded.");
client.ClientCredentials.Windows.ClientCredential.Domain = "Domain Name";
client.ClientCredentials.Windows.ClientCredential.UserName = "User Account";
client.ClientCredentials.Windows.ClientCredential.Password = "Password";
//client.ClientCredentials.UserName.UserName = @"[email protected]";
//client.ClientCredentials.UserName.Password = "Password";
//client.ClientCredentials.UseIdentityConfiguration = true;
try
{
List<Incident> cases = client.GetCases().ToList();
foreach (Incident Inc in cases)
{
Console.WriteLine(Inc.CaseID);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Покушение разрешения:
- Использование домена и локальных пользователей
- модифицирующих типа Реквизит клиента к основной, NTLM и Windows,
- с использованием установка IIS для использования
- IIS имеет базовую аутентификацию и проверку подлинности Windows
Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.
Спасибо за любую помощь вы можете предоставить
Добро пожаловать в SO. Вы написали хороший вопрос для первого плаката, но я думаю, что отсутствует небольшая, но важная часть информации, а именно: какое поведение или ошибки вы видите? Кроме того, я думаю, что установка 'securityMode' в« None »может повлиять на то, что вы пытаетесь сделать - параметры безопасности для детей могут быть проигнорированы (это только догадка с моей стороны). – Tim
Спасибо, Тим, полностью забыл добавить это, я добавил его сейчас. И спасибо за теплый прием –