c# 입니다 WCF를 통한 ReportingService2005-가장을 사용하지만 사용자 이름/비밀번호는 사용하지 않음




일치 없습니다 (3)

WCF를 통해 SSRS 2008의 ReportingService2005 서비스에 연결됩니다.

나는 다음과 같이 가장 (impersonation) 작업을한다.

ReportingService2005SoapClient rService = 
    new ReportingService2005SoapClient("endpoint config name", "the url");
rService.ClientCredentials.Windows.AllowedImpersonationLevel =
    System.Security.Principal.TokenImpersonationLevel.Impersonation;
rService.ChannelFactory.Credentials.Windows.ClientCredential =
    CredentialCache.DefaultNetworkCredentials;

하지만 다음과 같이 특정 사용자 이름 / 암호를 대신 전달하려고 시도 할 때 :

rService.ChannelFactory.Credentials.Windows.ClientCredential = 
    new NetworkCredential(username, password, domain); 

첫 번째 메서드 호출에서이 오류가 발생합니다.

클라이언트 인증 스키마 'Ntlm'을 사용하여 HTTP 요청에 권한이 없습니다. 서버에서받은 인증 헤더는 'NTLM'입니다.

여기 내 wcf 바인딩 설정의 관련 부분은 다음과 같습니다.

<basicHttpBinding>
    <binding name="ReportingService2005Soap"  ... blah blah blah ...
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" realm=""/>
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>

나는 두 가지 다른 경우에 Ntlm을 언급하는 오류 메시지에 혼란스러워한다.

따라서 문제는 두 개의 다른 WCF 설정 중 어느 것이 작동하도록하기 위해 두드리기가 필요합니까? :)

편집 : SSRS 서버에서 RSReportServer.config의 인증 비트는 다음과 같습니다.

<Authentication>
    <AuthenticationTypes>
        <RSWindowsNegotiate/>
        <RSWindowsNTLM/>
    </AuthenticationTypes>
    <EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>

그리고 SSRS web.config에서 :

<authentication mode="Windows" />

편집 : 나는 지금까지 최고의 답변을 표시 할 것입니다,하지만 아직 havent 내가 코드에서 임의의 자격 증명을 설정할 수있는 솔루션을 찾을 수 있기 때문에 이것은 여전히 ​​열려 있습니다.


Answer #1

전송 요소 속성 값을 다음과 같이 변경하십시오.

<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />

희망이 도움이 ...


Answer #2

다음을 지정하여이를 해결했습니다.

client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

Answer #3

OK 새로운 시도.

WCF 서비스는 IIS에서 실행되고 SSRS는 Windows 인증을 사용합니다.

Windows 인증을 받으면 사용자 Windows 보안 컨텍스트가 사용되므로 작동합니다.

사용자 이름과 암호를 사용하면 IIS 사용자가 사용됩니다. SSRS에 대한 액세스 권한이없는 사용자

그래서 그것을 작동 시키려면 :

  • WCF 서비스 web.config의 보안 섹션에서 impersonate = false를 설정합니다.
  • 그러면 응용 프로그램 풀의 ID를 사용해야합니다.
  • 그런 다음 응용 프로그램 풀의 ID를 SSRS에 대한 액세스 권한이있는 사용자로 변경합니다




credentials