2009-12-20 5 views
0

Java WS를 사용하는 C# 응용 프로그램이 있습니다. WS가 인증을 사용하도록 구성 될 때까지 모든 것이 잘 작동했습니다. 이제는 WS에서 메소드를 실행하기 위해 사용자 로그인 암호를 사용해야하지만 어떻게해야할지 모르겠습니다. 내가자바 인증에 문제가 있습니다

var client = new MyBeanClient(); 
        client.ClientCredentials.UserName.UserName = "admin"; 
        client.ClientCredentials.UserName.Password = ""; 
        client.addConsumer("whatever", "", "", ""); 

하지만 SecurityMessageException를 얻을하려고했습니다 - { ". HTTP 요청은 클라이언트 인증 체계 '익명'서버가되었다 에서 수신 한 인증 헤더 '협상, NTLM'무단입니다." } InnerException - (WebException) - { "원격 서버가 (401) 권한이 없습니다."} 오류를 반환했습니다.

무엇이 잘못 되었나요?

답변

0

이 시도

감사 :

var credentialCache = new CredentialCache(); 
var credentials = new NetworkCredential("username", "password", "domain"); 
credentialCache.Add(new Uri(client.Url), "NTLM", credentials); 
client.Credentials = credentialCache; 
client.addConsumer("whatever", "", "", ""); 

업데이트 : 클라이언트 프록시를 생성하는 wsdl.exe를 사용하여 줄 알았는데 내 첫 번째 게시물에

죄송합니다. 은 WCF 클라이언트의 끝점을 구성해야합니다

var basicHttpBinding = new BasicHttpBinding(); 
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
var endpoint = new EndpointAddress("http://example.com/myWindowsAuthN"); 
var client = new MyBeanClient(basicHttpBinding, endpoint); 
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 

client.ChannelFactory.Credentials.Windows.ClientCredential.Domain = "domain"; 
client.ChannelFactory.Credentials.Windows.ClientCredential.UserName = "username"; 
client.ChannelFactory.Credentials.Windows.ClientCredential.Password = "password"; 


UPDATE2 : 나는 NTLM 인증으로 보호 된 웹 서비스를 호출하기 위해 다음과 같은 구성을 사용했습니다

.

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="NtlmBinding"> 
     <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Ntlm" /> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint 
     address="http://example.com/SomeWindowsAuthenticatedService" 
     binding="basicHttpBinding" 
     bindingConfiguration="NtlmBinding" 
     contract="IOperationContractOfTheService" 
     name="WSTestSoap" /> 
    </client> 
</system.serviceModel> 

를 다음 메소드를 호출하기 전에 해당 자격 증명을 설정할 수 있습니다 :

using (var client = new MyBeanClient()) 
{ 
    client.ChannelFactory.Credentials.Windows.ClientCredential = 
     new NetworkCredential("username", "password", "DOMAIN"); 
    client.addConsumer("whatever", "", "", ""); 
} 
+0

불행하게도 클라이언트에는 자격 증명 필드가없는 클라이언트의 app.config에서 다음과 같은 넣습니다. ClientCredentials 속성 만 있지만 읽기 전용입니다./또한 클라이언트에는 URL 속성이 없습니다./ – arek

+0

여전히 동일한 문제가 있습니다./SecurityMessageException :/ – arek

+0

안녕하세요, 답변 해 주셔서 감사합니다. "DOMAIN"으로 무엇을 써야할까요? – arek

관련 문제