2011-08-03 3 views
1

동영상보기, 동영상보기, 인터넷 검색, MembershipProvider에서 양식 인증을 사용하는 ASP.NET 응용 프로그램과 WCF를 연결하는 방법에 대해 매우 혼란스러워합니다.WCF 및 ASP.NET MembershipProvider에 대한 혼동 양식 인증

<%@ ServiceHost Language="C#" 
       Service="System.Web.ApplicationServices.AuthenticationService" %> 

: 나는 당신이 전문 서비스 호스트를 사용이 제안은, (http://msdn.microsoft.com/en-us/library/bb398990.aspx][1가]) 여기에서 설명하는 본 적이 또한 ServiceFactory에서 수행하는 구현을 보았습니다.

ServiceHost serviceHost = new ServiceHost (typeof(MyServices), baseAddresses) 
          { 
          Credentials = 
          { 
           UserNameAuthentication = 
            {MembershipProvider = Membership.Provider} 
          }, 
          Authorization = 
          { 
           PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles 
          } 
          }; 

serviceHost.Credentials.ServiceCertificate.SetCertificate(HttpContext.Current.Request.ServerVariables["HTTP_HOST"]); 

두 가지 방법 모두 저를 혼란스럽게합니다. 첫 번째 서비스의 경우 특정 서비스 계약을 어디에 지정해야합니까? 서비스가 여러 개인 경우 어떻게해야합니까? 두 번째 방법은 더 명확합니다. 하지만 두 경우 모두 양식 인증 보호 된 디렉토리 (예 : mysite/admin/myservice.svc)에 액세스하려고하면 어떻게됩니까? 보안 메커니즘이 서비스 및 디렉토리 액세스 수준에서 시작됩니까? 파일 액세스와 실제 WCF 서비스에 대해 서로 다른 두 가지 멤버 자격 공급자를 사용하려면 어떻게해야합니까? 이것은 일반적인 시나리오가 아닙니다.

도움이 될 경우 대단하고 혼란 스럽습니다.

답변

1

WCF의 장점은 web.config 또는 코드 숨김 (사용자의 취향에 따라 다름)에서 수행 할 수 있다는 것입니다. WCF에 대한 인증은 동작에서 처리됩니다. 내 바인딩에 web.config를 사용하는 것이 훨씬 쉽다는 것을 알게되었습니다. 다음은 서버 구성이 어떻게 표시되는지에 대한 간단한 예제입니다.

<system.serviceModel> 
<bindings> 
    <wsHttpBinding> <!-- required since BasicHttpBinding has no security model --> 
    <binding name="FormsAuthProvider"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName" negotiateServiceCredentials="true"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="FormsAuthProvider"> 
     <serviceCredentials> 
      <usernameAuthetication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="formsProvider"/> 
     </serviceCredentials>  
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
    </system.serviceModel> 
    <system.web> 
    <membership> 
     <providers> 
     <add name="formsProvider" type="..."/> 
     </providers> 
    </membership> 
    </system.web> 

이 예제 구성은 전송 보안 (보안 모드)이 아닌 메시지 보안에서 작동합니다. 서비스 자체에 디렉토리 보안이있는 경우 서비스 엔드 포인트를 사용하기 전에 인증되어야합니다.

MSDN이 옵션이 일반적인 보안 시나리오로 나열되지 않은 이유는 무엇입니까?

+1

나는 "WCF의 아름다움"이라는 문구를 처음 본 것으로 믿는다. – kenwarner

+0

나는 내가 준 예제에서 보안이 ServiceHost 레벨로 설정되었지만 귀하의 예에서는 바인딩 레벨 . 차이점이 뭐야? web.config에 관해서는, 특히 사용자에게 그렇게하도록 지시해야하는 경우 배포하기가 매우 어렵습니다. –

+0

web.config와 ServiceHost 구성의 바인딩에는 차이점이 없습니다. 그것은 같은 것이다. web.config의 바인딩은 단일 끝점 (더 많은 범위 제어)이있는 서비스 호스트 대신 모든 끝점 (wsHttpBinding, basicHttpBinding 등)에 적용될 수 있으므로 더 융통성이 있습니다. – SliverNinja