Я настроил веб-сервис WCF для обработки запросов из приложения Silverlight. Для этой службы настроена проверка подлинности Windows, которая хорошо работает со следующей конфигурацией конечной точки
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Test.Service.ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="customBinding0">
<binaryMessageEncoding/>
<httpTransport authenticationScheme="Negotiate"/>
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="Test.Service.ServiceBehavior" name="Test.Service.Service">
<endpoint address="" binding="customBinding" bindingConfiguration="customBinding0" contract="Test.Service.Service"/>
<endpoint address="mex" binding="customBinding" bindingConfiguration="customBinding0" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
Служба также имеет следующий код в конструкторе, который проходит проверку подлинности на сервере TFS
teamFoundationServer = TeamFoundationServerFactory.GetServer(tfsServer);
teamFoundationServer.EnsureAuthenticated();
workItemStore = (WorkItemStore)teamFoundationServer.GetService(typeof(WorkItemStore));
Затем у меня есть приложение Silverlight, которое использует этот веб-сервис и содержит следующий код для доступа к нему
proxy = new ServiceClient("Service");
Наконец, есть хост-сайт, который содержит только файл .xap silverlight. На этом сайте также настроена аутентификация Windows.
Служба и хост работают в IIS.
Проблема, с которой я столкнулся, заключается в том, что, когда служба аутентифицируется с использованием TFS, я всегда получаю исключение
Microsoft.TeamFoundation.TeamFoundationServerUnauthorizedException: TF30063: You are not authorized to access
Поскольку служба и хост проходят проверку подлинности Windows, приложение Silverlight, скорее всего, вызывает у меня проблемы. После поиска и проверки подлинности Silverlight и Silverlight возникла некоторая проблема с пересылкой учетных данных от хоста к службе. Кто-нибудь смог выполнить эту задачу?
Чтобы предоставить дополнительную информацию, я смог получить текущее имя пользователя, выполнив
OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.AuthenticationType
Но это возвращает WindowsIdentity, который не совместим с ICredential, который требуется API TFS: (