Проверка подлинности формы на 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

Почему я дал ответ на старый пост - потому что кто-то может искать ответ. Надеюсь это поможет.

Другие вопросы по тегам