Как передать аутентификацию службе 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.?? Есть идеи, как мне это сделать?