Как передать аутентификацию службе WCF

У меня есть веб-сайт, настроенный в IIS. default web site это основной веб-сайт, и есть MVC application а также WCF application настроен под default web site, Что-то вроде ниже

default web site использует аутентификацию OpenID connect с использованием cookie-аутентификации. Поэтому, когда пользователь пытается получить доступ к любому ресурсу из default web site или его дочерние приложения он перенаправляется на страницу входа. Это работает нормально, как и ожидалось.

Теперь у меня есть требование, где MVC приложение должно вызвать операцию из WCF сервис по нажатию кнопки. Поэтому я добавил ссылку на сервис в приложение MVC и настроил привязку, как показано ниже

Конфигурация службы WCF

    <system.serviceModel>
        <extensions>
          <behaviorExtensions>
            <add name="silverlightFaults" type="Framework.Wcf.SilverlightFaultBehavior, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b297de4b0f792ff8" />
          </behaviorExtensions>
        </extensions>
        <services>
          <service name="DocumentManagementService.DocumentManagementService" behaviorConfiguration="DocumentManagementServiceBehavior">
            <endpoint name="BasicHttpEndPoint" binding="basicHttpBinding" contract="DocumentManagementService.Contracts.IDocumentManagement" bindingConfiguration="BasicHttpEndPoint" behaviorConfiguration="SilverlightFaultBehavior" />        
          </service>
        </services>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpEndPoint" closeTimeout="00:2:00" openTimeout="00:2:00" receiveTimeout="0:5:00" sendTimeout="00:5:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="104857600" maxBufferPoolSize="524288" maxReceivedMessageSize="104857600" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="104857600" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="DocumentManagementServiceBehavior">          
              <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>          
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="SilverlightFaultBehavior">
              <silverlightFaults />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
     </system.serviceModel>

Конфигурация MVC (это клиент)

  <system.serviceModel>
    <bindings>
       <basicHttpBinding>        
          <binding name="BasicHttpEndPoint" closeTimeout="00:2:00" openTimeout="00:2:00" receiveTimeout="0:5:00" sendTimeout="00:5:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="104857600" maxBufferPoolSize="524288" maxReceivedMessageSize="104857600" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="104857600" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
        </binding> 
      </basicHttpBinding>     
    </bindings>
    <client>
      <endpoint address="https://XXXXX/DocumentManagementService/DocumentManagementService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpEndPoint"
        contract="DMProxy.IDocumentManagement" name="BasicHttpEndPoint" />
    </client>
  </system.serviceModel>

Однако, когда я вызываю операцию WCF, я получаю ошибку

HTTP-запрос не авторизован с помощью схемы аутентификации клиента "Anonymous". Заголовок аутентификации, полученный от сервера, был ''.

Обратите внимание, что когда пользователь нажимает кнопку, он уже прошел аутентификацию. Я не уверен, как эта аутентификация будет передана в приложение WCF.

Обновление 1

Аутентификация IIS для веб-сайта по умолчанию

Аутентификация IIS для WCF

Обновление 2 Я думаю, * мне нужно добавить куки аутентификации в Cookies и HttpHeader, прежде чем я сделаю вызов WCF.?? Есть идеи, как мне это сделать?

0 ответов

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