#c# #wcf #web-services
#c# #wcf #веб-службы
Вопрос:
У меня есть веб-служба, которая использует проверку подлинности Windows. Веб-служба размещена в IIS. Возможно ли сузить доступ к этой веб-службе только для нескольких конкретных пользователей? Моя текущая веб-конфигурация:
<services>
<service name="LANOS.SplunkSearchService.SplunkSearch">
<endpoint binding="basicHttpBinding" bindingConfiguration="basicHttp"
contract="LANOS.SplunkSearchService.ISplunkSearch" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicHttp" allowCookies="true" maxBufferSize="20000000"
maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000">
<readerQuotas maxDepth="32" maxStringContentLength="200000000"
maxArrayLength="200000000" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
Кстати, я попробовал решение, похожее на это, которое я нашел в Интернете:
<authentication mode="Windows"/>
<authorization>
<allow roles=".Developers"/>
<allow users="DOMAINServiceAccount"/>
<deny users="*"/>
</authorization>
Однако это не работает. : ( Это позволяет всем пользователям домена проходить.
Комментарии:
1. Вы отключили анонимную проверку подлинности и включили проверку подлинности Windows для приложения, в котором размещена ваша служба WCF в IIS?
Ответ №1:
Профессиональный WCF 4 от Wrox описывает способ настройки аутентификации по имени пользователя / паролю в главе 8. Подводя итог, вам нужен пользовательский валидатор:
public class MyCustomUserNamePasswordValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if(userName != "foo" amp;amp; password != "bar")
{
throw new SecurityTokenValidationException("Invalid user");
}
}
}
После этого вам нужно добавить изменить свой элемент userNameAuthentication в конфигурации службы на «Пользовательский» и определить средство проверки:
<userNameAuthentication
userNamePasswordValidationMode = "Custom"
customUserNamePasswordValidatorType =
"Common.MyCustomUserNamePasswordValidator, Common" />
Надеюсь, это поможет.
Комментарии:
1. Хорошо, я попробую, но я не верю, что вы не можете заставить его работать без изменения кода WS. Я все еще надеюсь, что смогу заставить его работать, только изменив веб-конфигурацию.