Проверка подлинности формы на NetTcpBinding в службе WCF
Я использую службу WCF, у которой есть две конечные точки WsHttpBinding и NetTcpBinding, а служба использует проверку подлинности с помощью форм. Сервис размещен на IIS 7.
Это прекрасно работает с WsHttpBinding, но не работает для NetTcpBinding.
Это не соответствует приведенному ниже утверждению:
FormsAuthentication.SetAuthCookie("COOKIENAME", false);
И исключение:
Object reference not set to an instance of an object.
Пожалуйста, поделитесь своими идеями по этому вопросу.
2 ответа
Проверка подлинности с помощью форм требует куки / сеанс, который не поддерживается самим протоколом. Таким образом, проверка подлинности с помощью форм не может быть реализована в NetTcpBinding службы WCF.
Опция 1:
- Добавить ссылки на
System.IdentityModel
&System.IdentityModel.Selectors
а также сборки WCF. - Установите режим безопасности на Сообщение на вашей привязке
- Установить
Message.ClientCredentialType
вMessageCredentialType.UserName
- Создать тип, полученный из
UserNamePasswordValidator
и реализовать единственный метод. Вы должны выдать SecurityTokenException, если пара имя пользователя / пароль не проверяется.
В свойстве Credentials экземпляра узла службы установите:
UserNameAuthentication.UserNamePasswordValidationMode
вUserNamePasswordValidationMode.Custom
UserNameAuthentication.CustomUserNamePasswordValidator
на новый экземпляр вашегоUserNamePasswordValidator
класс.- Установите сервисный сертификат с
ServiceCertificate.SetCertificate()
Что касается диалога учетных данных на стороне клиента, вы можете создать его самостоятельно и на своем наборе прокси. proxy.ClientCredentials.UserName.UserName
& proxy.ClientCredentials.UserName.Password
прежде чем открыть прокси / использовать его в первый раз. Или вы можете проверить, как вы можете реализовать System.ServiceModel.Dispatcher.IInteractiveChannelInitializer
создать свой собственный интерактивный интерфейс инициализации.
Вариант 2:
Другая альтернатива это больше похоже на то, что вы хотите сделать.. Передача куки FormsAuthentication службе WCF
Почему я дал ответ на старый пост - потому что кто-то может искать ответ. Надеюсь это поможет.