6

Ben SharePoint var 2010 harici kullanıcılar için hem , Windows ve Formlar tabanlı kimlik doğrulama (FBA) ile istem Tabanlı Kimlik Doğrulama için yapılandırılmış. Ayrıca özel WCF Hizmetleri'u geliştirmem gerekiyor. Sorun, Windows kimlik bilgilerinin WCF Hizmetlerine (IPS) geçmesini istemektir; Ancak, Windows kimlik bilgileri hizmetlere geçirilmiş gibi görünmüyor. Özel WCF hizmetim Anonim kimlik doğrulaması kullanıyor (FBA oturum açma ekranını görüntülemek için IIS'de etkinleştirilmesi gerekir).SharePoint 2010 Özel WCF Servisi - Windows hem FBA Kimlik

Takip etmeye çalıştığım örnek http://msdn.microsoft.com/en-us/library/ff521581.aspx adresinde bulundu.

WCF hizmeti, _vti_bin (ISAPI klasörü) olarak dağıtılır. İşte

.svc dosyasının İşte

<%@ 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" %> 

kodudur (.svc dosyası

[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; 
    } 
    } 

ben bunu test etmek sadece var WCF testi istemci için kod arkasında WPF olduğunu Uygulamanın)

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()); 
    } 

Ben IIS secur ile biraz tecrübesiz değilim ... WCF hizmetini çağırmak için aşağıdaki kod kullanır İstemler ve it ve Windows ve FBA hem kullanmaya çalışırken ity ayarları/yapılandırmaları. Güvenlik için WCF konfigürasyonları söz konusu olduğunda da deneyimsizim. Genellikle dahili biz uygulamaları geliştiririm ve Visual Studio'nun ne kullanacağına karar vermesine izin veririm çünkü güvenlik nadiren endişe kaynağıdır.

cevap

0

Sanırım cevabı çözdüm. Anahtar, bir web.config dosyası oluşturmak ve .svc dosyasıyla aynı klasöre dağıtmaktır. Web.config dosyasının, "basicHttpBinding" yerine "wsHttpBinding" kullanımının ciltlenmeyi belirtmesi gerekir. Ayrıca, fabrika özniteliğini .svc bildirimi ve sınıftaki BasicHttpBindingServiceMetadataExchangeEndpoint özniteliğinde de kaldırdım. Tüm web.config dosyanızı bir çözüm olarak gönderebilir misiniz?

+5

WCF ve 2010 taleplerine dayalı kimlik doğrulaması ile benzer bir sorunla karşılaşıyorum. –