2012-05-16 1 views
2

나는 레일 3에서 개발 및 Savon를 사용하고 (savonrb.com)레일 Savon는 SOAP 인증

내가
  • 웹 서비스는 인증을
  • I을 필요로 SOAP을 통해 웹 서비스에 연결해야

    1. 연결할 수는 있지만 인증을받을 수는 없습니다 ...

      테스트 용 SOAP UI를 사용했습니다. & 모두 정상적으로 작동합니다. 여기

      방법처럼 내 레일 코드 보인다 : 나는 응답을하지만

      client = Savon::Client.new do 
          wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL" 
      end 
      
      client.wsse.credentials "username", "password", :digest 
      
      if response.success? 
      
          @soap_status = 'Connected' 
          @data = response.to_array(:get_brochure_response, :error_message) 
      
      end 
      

      : ERROR_MESSAGE가 인증에 실패 반환

      다음

      그것이 SOAP UI의 모습입니다 ...

      <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://services.blahblah.com/service"> 
          <soap:Header> 
           <ser:ICEAuthHeader> 
           <!--Optional:--> 
           <ser:Username>username</ser:Username> 
           <!--Optional:--> 
           <ser:Password>password</ser:Password> 
           </ser:ICEAuthHeader> 
          </soap:Header> 
          <soap:Body> 
           <ser:GetBrochure> 
          <!--Optional:--> 
           <ser:MappedID>123</ser:MappedID> 
           </ser:GetBrochure> 
          </soap:Body> 
      </soap:Envelope> 
      
    +0

    Savon을 사용 해본 적이 없지만 비누를 사용했습니다. 서버가 실제로 완료된 사례를 보았습니다. 너 너 c 을 제거하지 않고 테스트하십시오. 또한 당신이 돌아 오는 어떤 오류가 있습니까? SOAP 응답처럼? –

    +0

    나는 SOAP 코드를 전달하지 않고있다. 예제로 더 이해하기 쉽도록 여기에 puten했다. SOAP에 연결하고 응답을받을 수 있습니다. 그러나 인증되지 않은 응답. 나는 username & password를 전달하는 많은 방법을 시도했지만 작동하지 않는 것 같습니다 ... –

    답변

    0

    기본 인증을 사용하여 인증을 시도 할 수 있습니다.

    client = Savon::Client.new do 
        wsdl.document = "http://services.blahblah.com/Service.asmx?WSDL" 
        http.auth.basic "username", "password" 
    end 
    
    1

    SOAP 요청과 함께 헤더에 사용자 이름과 암호가 전송됩니까? 그렇다면, 당신은 Savon 클라이언트를 초기화 할 때 (cannot set SOAP header parameters on savon call 참조)이 일에 대해 갈 수 : 특정 통화가 인증을 필요로하는 경우

    client = Savon.client(
        wsdl: SOAP_WSDL, 
        endpoint: SOAP_URL, 
        soap_header: { :username => username, :password => password } 
    ) 
    

    덧붙여, 당신과 같이 통화를 할 수 있습니다 :

    response = client.call(
        :soap_call, 
        :soap_header => { :username => username, :password => password }, 
        message: {message} 
    ) 
    
    0
    client = Savon.client(wsdl: 'http://service.example.com?wsdl',soap_header: { "AuthenticateRequest" => {"apiKey" => "****** your api *********"}}, pretty_print_xml: true) 
    
    client.operations 
    
    response = client.call(:function) 
    

    여기에 "apiKey"는 api를 인증하는 데 사용되는 내 유모차입니다. 사용자가 다를 수 있습니다.