W3C

WSDL 1.1 for XKMS

W3C Working Group Note @@ September 2005

This version:
http://www.w3.org/TR/2005/NOTE-xkmswsdl-2005@@@@/
Latest version:
http://www.w3.org/TR/xkmswsdl/
Previous version:
This is the first version
Authors:
Rich Salz (DataPower Technology, Inc)
Yunhao Zhang (SQLData Systems)

Abstract

The XML Key Management Specification (XKMS 2.0) is a W3C Recommendation that specifies protocols for distributing and registering public keys.

The XML Key Management Service (XKMS) Working Group has defined a Web Service to handle conventional PKI (public-key infrastructure) functions such as registration, revocation and status, as well as related functions such as retrieval.

This note provides a sample Web Services Description Language (WSDL) 1.1 description for an XKMS service. It is intended that XKMS developers use this as a "first draft" for developing their own version. Conversion to WSDL 2.0 should be fairly straightforward, once that specification completes its Last Call.

Status of this document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This is the @@ September 2005 Working Group Note of "WSDL 1.1 for XKMS." It document was developed by the XML Key Management Working Group. It is intended to provide a WSDL 1.1 document that XKMS implementors may find useful. It is being published as the XKMS Working Group concludes, and has no normative status.

While the XKMS Working Group has completed its chartered work items, we expect that the mailing list will remain active for some time. Please send comments about this document to www-xkms@w3.org (with public archive).

As of this publication, the Working Group does not expect this document to become a W3C Recommendation, and therefore it has no associated W3C Patent Policy licensing obligations. If this expectation changes, the Working Group or its sucessors will have an opportunity to fulfill the associated patent policy requirements with respect to a future draft.

This document was developed under no patent policy.

Table of Contents

1 Introduction
2 WSDL file

1 Introduction

Since XKMS uses a conventional request-response message exchange pattern, the WSDL file is very straightforward. In fact, there are really only two parameters that an implementor would most likely have to change. The first is the value of the SOAPAction HTTP header. The second is the URL where the service may be reached. A single XKMS service may wish to expose one URL for all domains that it processes, or a separate URL for each one.

WSDL file

Note that the definition below uses two entities which must either be replaced inline or defined with a DTD:

soapaction
The value to be used in the HTTP SOAPAction header.
serviceURL
The URL where the service can be reached.

An XML version of this file may be found at http://www.w3.org/TR/xkms2/Schemas/xkms.wsdl

    <?xml version="1.0"?>

    <wsdl:definitions name="XMLKeyManagement"
      targetNamespace="http://www.w3.org/2002/03/xkms#wsdl"
      xmlns:tns="http://www.w3.org/2002/03/xkms#wsdl"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:xkms="http://www.w3.org/2002/03/xkms#">

      <import namespace="http://www.w3.org/2002/03/xkms#"
        location='http://www.w3.org/TR/xkms2/Schemas/xkms.xsd'/>

      <message name="PendingRequest">
          <part name="body" element="xkms:PendingRequest"/>
      </message>
      <message name="PendingResult">
          <part name="body" element="xkms:Result"/>
      </message>
      <message name="CompoundRequest">
          <part name="body" element="xkms:CompoundRequest"/>
      </message>
      <message name="CompoundResult">
          <part name="body" element="xkms:CompoundResult"/>
      </message>
      <message name="StatusRequest">
          <part name="body" element="xkms:StatusRequest"/>
      </message>
      <message name="StatusResult">
          <part name="body" element="xkms:StatusResult"/>
      </message>
      <message name="LocateRequest">
          <part name="body" element="xkms:LocateRequest"/>
      </message>
      <message name="LocateResult">
          <part name="body" element="xkms:LocateResult"/>
      </message>
      <message name="ValidateRequest">
          <part name="body" element="xkms:ValidateRequest"/>
      </message>
      <message name="ValidateResult">
          <part name="body" element="xkms:ValidateResult"/>
      </message>
      <message name="RegisterRequest">
          <part name="body" element="xkms:RegisterRequest"/>
      </message>
      <message name="RegisterResult">
          <part name="body" element="xkms:RegisterResult"/>
      </message>
      <message name="ReissueRequest">
          <part name="body" element="xkms:ReissueRequest"/>
      </message>
      <message name="ReissueResult">
          <part name="body" element="xkms:ReissueResult"/>
      </message>
      <message name="RevokeRequest">
          <part name="body" element="xkms:RevokeRequest"/>
      </message>
      <message name="RevokeResult">
          <part name="body" element="xkms:RevokeResult"/>
      </message>
      <message name="RecoverRequest">
          <part name="body" element="xkms:RecoverRequest"/>
      </message>
      <message name="RecoverResult">
          <part name="body" element="xkms:RecoverResult"/>
      </message>

      <portType name="XKMSPortType">
          <operation name="Pending">
              <input message="tns:PendingRequest"/>
              <output message="tns:PendingResult"/>
          </operation>
          <operation name="Compound">
              <input message="tns:CompoundRequest"/>
              <output message="tns:CompoundResult"/>
          </operation>
          <operation name="Status">
              <input message="tns:StatusRequest"/>
              <output message="tns:StatusResult"/>
          </operation>
          <operation name="Locate">
              <input message="tns:LocateRequest"/>
              <output message="tns:LocateResult"/>
          </operation>
          <operation name="Validate">
              <input message="tns:ValidateRequest"/>
              <output message="tns:ValidateResult"/>
          </operation>
          <operation name="Register">
              <input message="tns:RegisterRequest"/>
              <output message="tns:RegisterResult"/>
          </operation>
          <operation name="Reissue">
              <input message="tns:ReissueRequest"/>
              <output message="tns:ReissueResult"/>
          </operation>
          <operation name="Revoke">
              <input message="tns:RevokeRequest"/>
              <output message="tns:RevokeResult"/>
          </operation>
          <operation name="Recover">
              <input message="tns:RecoverRequest"/>
              <output message="tns:RecoverResult"/>
          </operation>
      </portType>

      <binding name="SOAPBinding" type="tns:XKMSPortType">
          <wsdlsoap:binding
            transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
          <operation name="Pending">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:PendingRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:PendingResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
          <operation name="Compound">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:CompoundRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:CompoundResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
          <operation name="Status">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:StatusRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:StatusResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
          <operation name="Locate">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:LocateRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:LocateResult">
                  <wsdlsoap:body use="literal"/>
            </output>
          </operation>
          <operation name="Validate">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:ValidateRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:ValidateResult">
                  <wsdlsoap:body use="literal"/>
            </output>
          </operation>
          <operation name="Register">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:RegisterRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:RegisterResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
          <operation name="Reissue">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:ReissueRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:ReissueResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
          <operation name="Revoke">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:RevokeRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:RevokeResult">
                  <wsdlsoap:body use="literal"/>
            </output>
          </operation>
          <operation name="Recover">
              <wsdlsoap:operation soapAction="&soapaction;"/>
              <input message="tns:RecoverRequest">
                  <wsdlsoap:body use="literal"/>
              </input>
              <output message="tns:RecoverResult">
                  <wsdlsoap:body use="literal"/>
              </output>
          </operation>
      </binding>

      <service name="XKMSService">
          <port name="XKMSPort" binding="tns:SOAPBinding">
              <wsdlsoap:address location="&serviceURL;"/>
          </port>
      </service>

    </wsdl:definitions>