Проверка подлинности Silverlight и ICredential - PullRequest
2 голосов
/ 22 сентября 2010

Я настроил веб-сервис 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: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...