На стороне сервера вы можете либо пройти аутентификацию в Active Directory, используя передаваемые учетные данные Windows, либо вам потребуется альтернативное хранилище для обработки аутентификации пользователя.
Вы можете получить доступ к идентификатору вызывающего абонента в коде на стороне сервера, используя:
IIdentity caller = ServiceSecurityContext.Current.PrimaryIdentity;
Вы также можете проверить, звонил ли пользователь Windows со своими учетными данными Windows (как в вашем примере), проверив
ServiceSecurityContext.Current.WindowsIdentity
Если значение равно NULL, учетные данные Windows не были переданы - в противном случае вы можете использовать эту идентификационную информацию Windows, чтобы проверить, кто звонит (имя и т. Д.), - однако вы не сможете прочитать пароль пользователя! Вы можете проверить его имя, к каким группам он принадлежит и многое другое.
Чтобы использовать проверку Windows / Active Directory, установите clientCredentialType на «Windows». Возможно, вам придется переключиться на wsHttpBinding или, что еще лучше: netTcpBinding (если вы находитесь в локальной сети Windows за брандмауэром).
<bindings>
<netTcpBinding>
<binding name="WindowsSecured">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
При этом только пользователи, зарегистрированные в вашем домене Windows, могут вызывать эту службу. Любым другим пользователям будет отказано без дополнительной работы с вашей стороны.
Как только пользователь звонит из Windows, вы можете проверить ServiceSecurityContext.Current.WindowsIdentity для получения информации о том, кто звонит.
Проверьте документы MSDN для получения подробной информации о том, что доступно в контексте безопасности службы, или идентификатор Windows .
Марк