6

que tienen SharePoint 2010 configurado para la autenticación de notificaciones base con tanto y autenticación de formularios basado en Windows (FBA) para los usuarios externos. También necesito desarrollar Servicios de WCF personalizados. El problema es que quiero que las credenciales de Windows pasen a los Servicios de WCF; sin embargo, parece que no puedo obtener las credenciales de Windows pasadas a los servicios. Mi servicio WCF personalizado parece estar usando autenticación anónima (que debe habilitarse en IIS para mostrar la pantalla de inicio de sesión de FBA).SharePoint 2010 servicio personalizado de WCF - Windows y autenticación de FBA

El ejemplo que he intentado seguir se encuentra en http://msdn.microsoft.com/en-us/library/ff521581.aspx.

El servicio WCF se implementa en _vti_bin (carpeta ISAPI).

Aquí está el código para el archivo .svc

<%@ ServiceHost Language="C#" Debug="true" 
Service="MyCompany.CustomerPortal.SharePoint.UI.ISAPI.MyCompany.Services.LibraryManagers.LibraryUploader, $SharePoint.Project.AssemblyFullName$" 
Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressBasicHttpBindingServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
CodeBehind="LibraryUploader.svc.cs" %> 

Aquí está el código subyacente para el archivo .svc

[ServiceContract] 
public interface ILibraryUploader 
{ 
    [OperationContract] 
    string SiteName(); } 

[BasicHttpBindingServiceMetadataExchangeEndpoint] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class LibraryUploader : ILibraryUploader 
{ 
    //just try to return site title right now… 
    public string SiteName() 
    { 
     WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity; 

     ClaimsIdentity claimsIdentity = new ClaimsIdentity(identity); 

     return SPContext.Current.Web.Title; 
    } 
    } 

El cliente de prueba WCF que acabo de probarlo (WPF aplicación) utiliza el siguiente código para llamar al servicio WCF ...

private void Button1Click(object sender, RoutedEventArgs e) 
    { 
     BasicHttpBinding binding = new BasicHttpBinding(); 
     binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; 

     EndpointAddress endpoint = 
      new EndpointAddress(
       "http://dev.portal.data-image.local/_vti_bin/MyCompany.Services/LibraryManagers/LibraryUploader.svc"); 

     LibraryUploaderClient libraryUploader = new LibraryUploaderClient(binding, endpoint); 
     libraryUploader.ClientCredentials.Windows.AllowedImpersonationLevel = 
      System.Security.Principal.TokenImpersonationLevel.Impersonation; 

     MessageBox.Show(libraryUploader.SiteName()); 
    } 

No tengo experiencia con IIS secur configuraciones/configuraciones cuando se trata de reclamos e intentar usar tanto Windows como FBA. Tampoco tengo experiencia en lo que respecta a las configuraciones WCF para seguridad. Normalmente desarrollo aplicaciones de biz internas y dejo que Visual Studio decida qué usar porque la seguridad rara vez es una preocupación.

Respuesta

0

Creo que encontré la respuesta. La clave es crear un archivo web.config e implementarlo en la misma carpeta que el archivo .svc. El archivo web.config necesita especificar el enlace para usar "wsHttpBinding" en lugar de "basicHttpBinding". También eliminé el atributo Factory en la declaración .svc y el atributo BasicHttpBindingServiceMetadataExchangeEndpoint en la clase.

+5

¿podría publicar su archivo web.config completo como solución? Me encuentro con un problema similar con WCF y la autenticación basada en reclamaciones de 2010. –

Cuestiones relacionadas