В настоящее время у меня есть службы WCF, которые развернуты на сайте SharePoint 2010 с поддержкой утверждений.В сервисах WCF нет ничего особенного, и я использую Microsoft.SharePoint.Client.Services.MultipleBaseAddressBasicHttpBindingServiceHostFactory в качестве фабрики услуг WCF.Таким образом, я использую готовую BasicHttpBinding, предоставляемую на заводе.
Мой клиентский app.config выглядит следующим образом:
<configuration>
<system.serviceModel>
<bindings>
<binding name="BasicHttpBinding_MyServices" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="200524288" maxBufferPoolSize="200524288" maxReceivedMessageSize="200524288"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</bindings>
<client>
<endpoint address="http://localhost/_vti_bin/MyServices/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyServices"
contract="ServiceClient.MyService.IMyService"
name="BasicHttpBinding_IMyService" />
</client>
</system.serviceModel>
</configuration>
При взгляде на мой Thread.CurrentPrincipal.Identity все верно.Это ClaimsIdentity с моим текущим пользователем.Затем я могу просто открыть новый экземпляр SPSite без необходимости создавать или использовать SPUserToken.
Одна ключевая вещь, на которую следует обратить внимание: я не выдаю себя за свою личность до подключения к службе WCF.Если это то, что вы делаете, это вряд ли сработает, если ваш сервер SharePoint не имеет установленного доверия с вашим поставщиком утверждений.