4

如何签署我的 SOAP 消息(例如 Header 中的 UserToken)使用 ksoap2 库在 Android 应用程序上用于 SOAP 消息和证书 x509?

我可以发送此消息:

<soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

<soap:Header>
    <wsse:Security 
        xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
        xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" soap:mustUnderstand="1">
            <wsse:UsernameToken 
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                        <wsse:Username>cbrown</wsse:Username>
                        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">welcome</wsse:Password></wsse:UsernameToken>
    </wsse:Security>
</soap:Header>
<soapenv:Body>
  <ns1:add xmlns:ns1="http://service.rampart.tutorial">
                    <ns1:a>4</ns1:a>
                    <ns1:b>6</ns1:b>
            </ns1:add>
    </soapenv:Body></soap:Envelope>

使用此代码:

public class AndroidWSClientActivity extends Activity {

private static final String SOAP_ACTION = "https//service.rampart.tutorial/SecureService";
private static final String SAY_HELLO = "SimpleHelo";
private static final String RETURN_SUMMA = "add";
private static final String NAMESPACE = "http://service.rampart.tutorial";
private static final String URL = "https://192.168.1.18:8443/axis2/services/SecureService?wsdl";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SoapObject request = new SoapObject(NAMESPACE, RETURN_SUMMA);
    request.addProperty( "a", 1);
    request.addProperty( "b", 3);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    Element[] header = new Element[1];
    header[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security");
    header[0].setAttribute(null, "mustUnderstand","1");

    Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
    usernametoken.setAttribute(null, "Id", "UsernameToken-1");
    header[0].addChild(Node.ELEMENT,usernametoken);

    Element username = new Element().createElement(null, "n0:Username");
    username.addChild(Node.IGNORABLE_WHITESPACE,"apache");
    usernametoken.addChild(Node.ELEMENT,username);

    Element pass = new Element().createElement(null,"n0:Password");
    pass.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
    pass.addChild(Node.TEXT, "password");
    usernametoken.addChild(Node.ELEMENT, pass);

    envelope.headerOut = header;
    envelope.setOutputSoapObject(request);

    try {
        HttpTransportSE ht = new HttpTransportSE(URL);
        ht.call(SOAP_ACTION, envelope);
        SoapObject result = (SoapObject) envelope.bodyIn;
        TextView tv = new TextView(this);
        if(result != null)
        {
            tv.setText(result.getProperty(0).toString());
        }
        else
        {
            Toast.makeText(getApplicationContext(), "No Response", Toast.LENGTH_LONG).show();
        }
        setContentView(tv);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

例如,如何发送此消息:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="true">
        <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-13121387">
            <wsu:Created>2008-03-27T15:29:37.454Z</wsu:Created>
            <wsu:Expires>2008-03-27T15:34:37.454Z</wsu:Expires>
        </wsu:Timestamp>
        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-29744585">
            <ds:SignedInfo>
                <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                <ds:Reference URI="#Id-14293164">
                    <ds:Transforms>
                        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                    </ds:Transforms>
                    <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                    <ds:DigestValue>KELVaFQ7RnfPIUMAU9q4D/5rGOU=</ds:DigestValue>
                </ds:Reference>
                <ds:Reference URI="#Timestamp-13121387">
                    <ds:Transforms>
                        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                    </ds:Transforms>
                    <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                    <ds:DigestValue>7t9QUVXRJ0yTS+84OSfsH7pAguM=</ds:DigestValue>
                </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue> ...ZL1FMFxsUvwBU2ZYYbNxGu/uJceG1i4uSPd6+BSiqYWal ...</ds:SignatureValue>
            <ds:KeyInfo Id="KeyId-24374386">
                <wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-8406772">
                    <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
                                                                ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier">
                                                    ins6410Q1skpvizn19AUk7dC6rI=
                                            </wsse:KeyIdentifier>
                </wsse:SecurityTokenReference>
            </ds:KeyInfo>
           </ds:Signature>
       </wsse:Security>
  </soapenv:Header>
  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-14293164">
    <ns1:add xmlns:ns1="http://service.rampart.tutorial">
        <ns1:a>3</ns1:a>
        <ns1:b>4</ns1:b>
     </ns1:add>
  </soapenv:Body>

链接到教程或示例会很有帮助。谢谢!

4

0 回答 0