Настройка аутентификации по имени пользователя и паролю (Basic Authentication)

В качестве выхлопа от прошлых моих статей мы научились проводить аутентификацию клиента по сертификату. Сертификаты – это очень хорошо, но иногда может возникать потребность аутентифицироваться по имени и паролю. Давайте рассмотрим, как это можно сделать. Как всегда, буду говорить про настройку BizTalk Server 2010, но, поскольку он использует WCF-адаптеры, фактически это настройка WCF.

Для аутентификации по имени пользователя и паролю нужно проверить настройки IIS – должен быть установлен тип аутентификации Basic. Проверить можно так:

  • Открываем IIS Manager, выбираем нужный нам сайт, переходим в раздел Authentication
    image
  • Далее нам нужно убедиться, что тип аутентификации Basic Authentication разрешен:
    image

Если такого типа в списке нет, значит, его нужно установить. Для этого открываем Windows Features (Control Panel\All Control Panel Items\Programs and Features, слева на панели Turn Windows features on or off) и выставляем указанные ниже на картике галочки в секции Internet Information Services \ World Wide Web Services \ Security, после чего нажимаем ОК, ждем когда всё настроится и проверяем IIS:
image

Итак, разрешили Basic Authentication на сайте в IIS, далее нужно настроить BizTalk. Для этого нужно залесть в BizTalk Server Administration, выбрать приложение, выбрать у него нужный Receive Location (через который клиенты будут ломиться к сервисами BizTalk).

Допустим, у нашего Receive Location выставлен тип WCF-BasicHttp, нажимаем кнопку Configure
image

На вкладке Security появившегося окна WCF-BasicHttp Transport Properties выставляем значения комбобоксов так, как на рисунке ниже:
image

Нажимаем везде OK, закрываем все окна, наш сервис настроен на аутентификацию.

Ну а дальше в клиенте задаем нужные credentials и всё счастливы:

client.ClientCredentials.UserName.UserName = "some_name";
client.ClientCredentials.UserName.Password = "some_psw";

Да, если вдруг начнете ловить ошибку Could not establish trust relationship for the SSL/TLS secure channel with authority, то попробуйте в коде до вызова сервиса прописать строчку

System.Net.ServicePointManager.ServerCertificateValidationCallback =
    ((sender, certificate, chain, sslPolicyErrors) => true);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *