Проблема с веб-службой Cisco UCP AuthenticateUser

Обновление: эта проблема устранена. Я пытался аутентифицировать различные учетные записи администратора, которые, по-видимому, находятся в отдельной базе данных, чем учетные записи пользователей, с которыми общается эта служба. Я использовал общую учетную запись пользователя, созданную в CISCO, и вызовы веб-служб работали отлично!

Я также хотел бы поблагодарить @Yahia за рекомендацию по запуску Fiddler!

Я читал веб-службу CICCO UCP документация уже несколько дней. Я могу общаться с одной веб-службой на коробке с соответствующими учетными данными, и все работает нормально; однако с помощью службы UCP я получаю ошибку... Похоже, что SoapUI понимает файл WSDL, и я могу отправить запрос на конечную точку, но я получить ошибку аутентификации, ниже.

Я использую то же имя пользователя и пароль для входа на портал ACS, поэтому срок действия учетной записи не истек. Я в значительной степени потерялся в этом и во власти технической поддержки CICSO. Приветствуются любые идеи!

Ответ SOAP:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:authenticateUserResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://cisco.com/nm/acs/mgmt/ucp/service/">
         <authenticateUserReturn href="#id0"/>
      </ns1:authenticateUserResponse>
      <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:ResponseType" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://cisco.com/nm/acs/mgmt/ucp/service/">
         <errors soapenc:arrayType="xsd:string[1]" xsi:type="soapenc:Array">
            <errors xsi:type="xsd:string">Credentials are incorrect.</errors>
         </errors>
         <status href="#id1"/>
      </multiRef>
      <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:StatusCodeType" xmlns:ns3="http://cisco.com/nm/acs/mgmt/ucp/service/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">failure</multiRef>
   </soapenv:Body>
</soapenv:Envelope>

Мыльный конверт:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://cisco.com/nm/acs/mgmt/ucp/service/">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:authenticateUser soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <userName xsi:type="xsd:string">myusername</userName>
    <password xsi:type="xsd:string">mypassword</password>
      </ser:authenticateUser>
   </soapenv:Body>
</soapenv:Envelope>

И WSDL:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://www.cisco.com/wsdl.service"
xmlns:intf="http://cisco.com/nm/acs/mgmt/ucp/service/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:documentation>Copyright (c) 2007, 2009 Cisco Systems, Inc.
  WSDL Service Interface for ACS5.1 User Change Password interface
  (UCP) This WSDL document defines the publication API calls for
  interacting with the ACS UCP service.</wsdl:documentation>
  <wsdl:types>
    <schema targetNamespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
    xmlns="http://www.w3.org/2001/XMLSchema">
      <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
      <complexType name="ArrayOf_xsd_string">
        <complexContent>
          <restriction base="soapenc:Array">
            <attribute ref="soapenc:arrayType"
            wsdl:arrayType="xsd:string[]" />
          </restriction>
        </complexContent>
      </complexType>
      <simpleType name="StatusCodeType">
        <restriction base="string">
          <enumeration value="success" />
          <enumeration value="failure" />
        </restriction>
      </simpleType>
      <complexType name="ResponseType">
        <sequence>
          <element name="errors" nillable="true"
          type="intf:ArrayOf_xsd_string" />
          <element name="status" nillable="false"
          type="intf:StatusCodeType" />
        </sequence>
      </complexType>
    </schema>
  </wsdl:types>
  <wsdl:message name="changeUserPassRequest">
    <wsdl:part name="userName" type="xsd:string" />
    <wsdl:part name="oldPassword" type="xsd:string" />
    <wsdl:part name="newPassword" type="xsd:string" />
  </wsdl:message>
  <wsdl:message name="authenticateUserRequest">
    <wsdl:part name="userName" type="xsd:string" />
    <wsdl:part name="password" type="xsd:string" />
  </wsdl:message>
  <wsdl:message name="changeUserPassResponse">
    <wsdl:part name="changeUserPassReturn"
    type="intf:ResponseType" />
  </wsdl:message>
  <wsdl:message name="authenticateUserResponse">
    <wsdl:part name="authenticateUserReturn"
    type="intf:ResponseType" />
  </wsdl:message>
  <wsdl:portType name="UCP">
    <wsdl:operation name="authenticateUser"
    parameterOrder="userName password">
      <wsdl:input message="intf:authenticateUserRequest"
      name="authenticateUserRequest" />
      <wsdl:output message="intf:authenticateUserResponse"
      name="authenticateUserResponse" />
    </wsdl:operation>
    <wsdl:operation name="changeUserPass"
    parameterOrder="userName oldPassword newPassword">
      <wsdl:input message="intf:changeUserPassRequest"
      name="changeUserPassRequest" />
      <wsdl:output message="intf:changeUserPassResponse"
      name="changeUserPassResponse" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="UCP" type="intf:UCP">
    <wsdlsoap:binding style="rpc"
    transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="authenticateUser">
      <wsdlsoap:operation soapAction="" />
      <wsdl:input name="authenticateUserRequest">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        namespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
        use="encoded" />
      </wsdl:input>
      <wsdl:output name="authenticateUserResponse">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        namespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
        use="encoded" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="changeUserPass">
      <wsdlsoap:operation soapAction="" />
      <wsdl:input name="changeUserPassRequest">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        namespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
        use="encoded" />
      </wsdl:input>
      <wsdl:output name="changeUserPassResponse">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        namespace="http://cisco.com/nm/acs/mgmt/ucp/service/"
        use="encoded" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="UCPService">
    <wsdl:port binding="intf:UCP" name="UCP">
      <wsdlsoap:address location="https://localhost/PI/services/UCP/" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

person pixelbobby    schedule 25.10.2011    source источник
comment
есть ли у вас доступный клиент, который успешно использует этот веб-сервис? если да, то вы можете прослушать с помощью WireShark и/или Fiddler, а затем проверить разницу между тем, что они отправляют по сети, и тем, что вы отправляете...   -  person Yahia    schedule 25.10.2011
comment
Отличная рекомендация, @Yahia. Я использовал FireFox с LiveHTTPHeaders и Tamper Data, чтобы увидеть, что происходит по сети с портала Cisco. К сожалению, похоже, что они используют не собственный веб-сервис, а java. Возможно, консультант Cisco напишет какой-нибудь пример кода веб-сервиса, и я смогу его протестировать...   -  person pixelbobby    schedule 25.10.2011


Ответы (1)


Обновление: эта проблема решена. Я пытался аутентифицировать различные учетные записи администратора, которые, по-видимому, находятся в отдельной базе данных, чем учетные записи пользователей, с которыми общается эта служба. Я использовал общую учетную запись пользователя, созданную в CISCO, и вызовы веб-служб работали отлично!

Я также хотел бы поблагодарить @Yahia за рекомендацию по запуску Fiddler!

person pixelbobby    schedule 02.11.2011