6

나는 셰어가 2010 외부 사용자 모두 윈도우폼 기반 인증 (FBA)클레임 기반 인증에 대해 구성. 또한 사용자 지정 WCF 서비스을 개발해야합니다. 문제는 Windows 자격 증명을 WCF 서비스에 전달하려고합니다. 그러나 Windows 자격 증명을 서비스에 전달할 수없는 것 같습니다. 내 사용자 지정 WCF 서비스가 익명 인증을 사용하고있는 것 같습니다 (FBA 로그인 화면을 표시하려면 IIS에서 활성화해야 함).SharePoint 2010의 사용자 지정 WCF 서비스 - Windows 및 FBA 인증

내가 시도한 예는 http://msdn.microsoft.com/en-us/library/ff521581.aspx입니다.

WCF 서비스는 _vti_bin (ISAPI 폴더)에 배포됩니다. 여기

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

코드입니다합니다 (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; 
    } 
    } 

나는 그것을 테스트하기 위해 단지 가지고있는 WCF 테스트 클라이언트의 코드 뒤에 WPF입니다 app)는 다음 코드를 사용하여 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()); 
    } 

IIS 보안에 다소 익숙합니다. 클레임 및 Windows와 FBA를 모두 사용하려고 할 때 설정/구성. 보안을 위해 WCF 구성에 관해서도 나는 경험이 없습니다. 필자는 보통 내부 비즈 애플 리케이션을 개발하고 보안이 거의 문제가되지 않기 때문에 Visual Studio에서 사용할 항목을 결정하도록합니다.

답변

0

나는 대답을 알아 냈다고 생각합니다. 핵심은 web.config 파일을 만들고 .svc 파일과 동일한 폴더에 배포하는 것입니다. web.config 파일은 "basicHttpBinding"대신 "wsHttpBinding"을 사용하도록 바인딩을 지정해야합니다. 또한 .svc 선언의 Factory 특성과 클래스의 BasicHttpBindingServiceMetadataExchangeEndpoint 특성을 제거했습니다.

+5

전체 web.config 파일을 솔루션으로 게시 할 수 있습니까? 나는 WCF와 2010 년 클레임 기반 인증과 비슷한 문제를 겪고있다. –