在声明身份验证的SharePoint 2010中托管的WCF服务中的模拟

时间:2011-03-23 12:25:21

标签: wcf sharepoint sharepoint-2010 wif claims

我有一个WCF服务,它使用带有消息安全性和Windows身份验证的wsHttpBinding。

控制台应用程序服务客户端能够调用该服务,我可以看到ServiceSecurityContext.Current.WindowsIdentity和Thread.CurrentPrincipal.Identity都代表了正确的用户。

正如预期的那样,当前的原则是IClaimsIdentity。

当我尝试打开SharePoint Web时出现问题:我收到拒绝访问错误,提示无法将模拟身份传递给数据库或sharepoint服务器。但这都是在同一台机器上,所以不应该有任何双跳认证问题。

这不是针对索赔申请中托管的服务进行无头认证的正确方法吗?

1 个答案:

答案 0 :(得分:0)

我目前拥有部署在启用声明的SharePoint 2010网站中的WCF服务。 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服务器与您的声明提供程序建立了信任关系,否则它不可能正常工作。