2010-08-09 4 views
2

현재 SQL 데이터베이스 (Linq2SQL을 통해)에 액세스하려는 WCF 서비스가 있지만 실제 IIS 환경의 신뢰할 수있는 보안이 사용하지 않는 것 같습니다. 오른쪽 자격 증명 - 나는 여기에 관련된 게시물을 따라하려고했지만 꽤 그것을 얻을 수없는 것. 누군가가 내 실수 ...WCF 및 IIS의 Windows 인증을 사용하여 데이터베이스에 액세스

엔드 포인트의 설정에 자리 수 있다면 정말 감사하게 될 거라고, 나는 나가를 설정 한

<basicHttpBinding> 
    <binding name="authHttpBinding"> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows"/> 
    </security> 
    </binding> 
</basicHttpBinding> 

다음과 같은 구성으로,은 BasicHttpBinding을 사용하도록 설정 한 system.web 설정하려면 : IIS 서버에서

<authentication mode="Windows" /> 
<identity impersonate="true" /> 

, 나는 새로운 AppPool을 추가 한 통합에 ApplicationPoolIdentity와 ManagedPipeLine에 ID를 설정합니다. 실제 웹 응용 프로그램에서 내 새 AppPool로 설정하고 Windows 인증을 "사용"으로 설정하고 ASP.Net 가장을 사용하거나 사용하지 않도록 설정했습니다.

WCF 서비스를 호출하면 실행되지만 Linq2SQL (신뢰할 수있는 보안을 사용하는 원격 서버의 데이터베이스)을 통해 저장된 proc을 실제로 호출하면 다음 오류가 발생합니다. 사용자 '도메인에 대한 로그인이 실패했습니다. \ machinename $'- 시스템 이름 끝 부분에 달러 기호가 있습니다.

정확한 신원을 위임하지 못한 것처럼 보입니다. Management Studio를 통해 실제 데이터베이스에 액세스 할 수 있습니다.

+0

같은 문제. 어떻게 해결했는지 기억한다면 알려주세요. – morpheus

답변

0

데이터베이스에 액세스하면 WCF 보안 설정과 관련이 없어야합니다. 바인딩 설정에서 보안 설정을 제거하고 system.web에서 가장 설정을 제거합니다. 이들 중 어느 것도 필요하지 않아야합니다.

구성에서 연결 문자열 설정을 확인하고 Windows 통합 보안을 사용하여 데이터베이스에 대한 올바른 사용 권한을 가진 db에 액세스 할 수 있는지 확인하십시오. IIS는 apppool에 구성된 ID를 사용하여 데이터베이스에 연결하려고 시도하므로 계정에 액세스 할 수 있는지 확인해야합니다. 명명 된 사용자가있는 경우 자격 증명이 올바르게 설정되어 있는지 확인하십시오. ConnectionStrings.com에는 올바르게 설정하는 방법에 대한 다양한 예제가 있습니다.

HTH.

스티브

+0

안녕 스티브, 나는이 응용 프로그램에 대한 내 요구 사항은 appPool에서 공유 ID가 아니라 요청하는 사용자의 ID를 사용하여 데이터베이스에 연결하는 것입니다. 그게 가능하니? 항상 전에 appPool ID를 사용하여이 작업을 수행했지만이 프로젝트에는이 요구 사항이 있습니다. 따라서 WCF보다 IIS의 기능이 더 많을 수도 있습니다. – TobyEvans

0

예 가능합니다. 이 경우 보안 설정이 Windows (기본값)로 설정되어 있는지 확인하고 서비스가 가장 (impersonation)인지 확인해야합니다. 프로그래밍 방식으로 또는 선언적으로이 작업을 수행 할 수 있습니다.

적절한 ImpersonationOption 특성을 필수 또는 허용으로 설정하여 원하는 서비스/방법에 가장을 허용하도록 WCF에 지시해야합니다. 당신이 네트워크를 통해 리소스에 액세스하기 때문에

[OperationBehavior(Impersonation=ImpersonationOption.Allowed)] 

, 당신은 당신이 액세스하는 자원이 지역 않는 한 가장 수준이 가장하지, 위임 설정되어 있는지 확인 상단이 필요합니다. 이 값은 클라이언트 엔드 포인트 작동 레벨에서 설정됩니다.

<clientCredentials> 
     <windows allowedImpersonationLevel="[Impersonation or Delegate]"/> 
</clientCredentials> 
+0

안녕하세요. 너 어떻게 시작 했니? – stephenl

+0

안녕하세요, Steve - 그냥 휴가를 끝내고, 어떻게 효과가 있었는지 알려 드리겠습니다. 나는 첫번째 설정을 놓치고 있었다. .. 건배 thjink – TobyEvans

관련 문제