Webservice, похоже, не выполняет никакой аутентификации, несмотря на конфигурацию в IIS7.5 - PullRequest
0 голосов
/ 05 июля 2011

Проблема

У меня есть веб-служба WCF, которую я размещаю в качестве веб-службы в IIS7.5. Я хочу, чтобы эта услуга была доступна только двум группам. Веб-служба работает успешно, хотя, похоже, аутентификация не выполняется.

У меня сложилось впечатление (прочитав кучу страниц MSDN, подтверждающих это), что все, что действительно нужно было сделать, это включить аутентификацию Windows на сайте приложений, отключить анонимную аутентификацию, установить режим для окон в файле web.config и Добавьте правила Разрешить / Запретить в раздел авторизации, как показано ниже:

<system.web>
  <authentication mode="Windows" />
  <compilation debug="false" strict="false" explicit="true" targetFramework="4.0" />
  <pages /> <!-- Omitted -->
  <authorization>
    <allow roles="Managers" />
    <allow roles="Operations" />
    <deny users="*" />
    <deny users="?" />
  </authorization>
</system.web>

После выполнения вышеуказанных шагов и внесения изменений в web.config после перехода на страницу авторизации в IIS и перезагрузки правил аутентификации вызов службы через WCFTestclient показывает, что она работает без сбоев. За исключением того, что я не являюсь частью ни одной из этих двух групп ...

Вопросы

Похоже, он просто впускает кого-то. Мои вопросы:

  1. Есть ли способ увидеть пройденные и не пройденные проверки подлинности на веб-сервисе? (Если так, я могу видеть, происходит ли какая-либо аутентификация).
  2. Вышеупомянутое выглядит правильно? Это кажется немного простым, но, учитывая метод Microsoft, не так уж и далеко, что нечто столь стандартное было бы довольно просто настроить.

Нижняя линия

У меня есть служба с вышеуказанным файлом web.config и экземпляр IIS7.5 с установленной и включенной аутентификацией Windows. Анонимная аутентификация отключена. Правила аутентификации определены для двух групп, чтобы иметь доступ, и для всех остальных должно быть отказано, и все же, несмотря на то, что я нахожусь в этих группах, я могу получить доступ к сервису.

EDIT:

Итак, похоже, у меня работает аутентификация. Если у меня есть только правило «Разрешить всем пользователям», у меня есть доступ к веб-сервису. Если я приму правило «Запретить всем пользователям», у меня больше не будет доступа. Однако, если я добавлю свою учетную запись («домен \ MyAccount» в качестве разрешения (независимо от позиции в web.config), у меня все равно не будет доступа.

Что я изменил, чтобы попасть сюда, В определение сервиса добавлено следующее:

<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Required)> _

В web.config добавлено следующее:

<system.web>
    <authentication mode="Windows"/>
    <authorization>
      <deny users="*"/>
      <allow users="sierra\cblissittekeps"/>
    </authorization>
</system.web>

и

<system.servicemodel>
  <bindings>
    <basicHttpBinding>
      <binding name="ADServiceBinding">
        <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Windows"/>
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
<system.servicemodel>

1 Ответ

1 голос
/ 07 июля 2011

Хорошо!Таким образом, очевидно, что шагов, которые я предпринял в оригинальном посте, на самом деле недостаточно.Вы должны добавить этот атрибут aspnetcompatabilityrequirements к классу сервиса (который реализует ваш интерфейс сервиса), вы должны добавить к тегу serviceHostingEnvironment атрибут aspNetCompatibility:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
                           aspNetCompatibilityEnabled="true" />

И что-то, о чем никто, кажется, не упоминаетпорядок ваших правил Разрешить / Запретить имеет значение.Добавление разрешения ПОСЛЕ a Запретить всем пользователям означает, что всем пользователям по-прежнему отказано.Установка этого параметра означает, что всем пользователям будет отказано, кроме тех, которые указаны в разрешении.

...