Hi Thilina,

Thanks a lot for taking a look at this ...

Here is the scenario:

[Note: I had to sanitize the files a little bit that I have attached here
due to proprietery reasons but I made sure that the conceptually nothing is
changed.]

So At Server side, there are couple of files:

1) server_side_code.c and 2) services.xml

At Client side, there are couple of files as well:

1) client_side_code.c and 2) policy.xml

The libraries are created by compiling client_side_code.c (library name:
libsecprv.so and included it in policy.xml) and server_side_code.c (library
name: libsec_soap.so and included it in services.xml) separately.

Axis2C and Rampart was used for client and server side code for SOAP
implementation.

Now my goal here is to come up with a java code (client only) that will
perform a CreateObject operation (mentioned in services.xml) and by doing
this it will send the SOAP request with security to the server and creates
the object.

I have already written a java code with SOAP (without security) and its
working fine ... now I just have to add the security part ...

So I am doing following:

1) Since for SOAP I am using Client STUB, initializing that with context
2) engaging rampart module (getting engaged successfully)
3) setting the property RampartMessageData.KEY_RAMPART_POLICY with the value
of policy.xml that I have attached.

Its giving me Encryption token missing error.

Now I know that in my policy xml, the module name (.so file) is the comipled
code from the C file and I have to do the same thing in JAVA as its in C
file. But since I dont have C skills so need help there.

Thanks.



On Thu, Feb 17, 2011 at 10:00 PM, Thilina Mahesh Buddhika <
[email protected]> wrote:

> If you can share the complete policy/scenario with us, then it would be
> much easier to point you to an equivalent rampart config.
>
> Thanks,
> Thilina
>
>
> On Thu, Feb 17, 2011 at 11:29 PM, Devdatta Lele 
> <[email protected]>wrote:
>
>> Hi I have RampartConfig used in Axis2C as follows:
>>
>> <rampc:RampartConfig xmlns:rampc="http://ws.apache.org/rampart/c/policy";>
>>                 <rampc:SecurityContextTokenProvider>path to a library
>> file</rampc:SecurityContextTokenProvider>
>>             </rampc:RampartConfig>
>>
>> Unfortunately, I am using Axis2Java and want to use the same config in my
>> policy.xml ... what will be the equivalent ? The reason I am wondering about
>> this is that I was not able to find equivalent of
>> SecurityContextTokenProvider in Axis2Java/Rmpart config web page.
>>
>> Thanks in advance.
>>
>>
>>
>
>
> --
> Thilina Mahesh Buddhika
> http://blog.thilinamb.com
>
#include <stdio.h>
#include <axutil_string.h>
#include <axutil_utils.h>
#include <oxs_utility.h>
#include <rampart_util.h>
#include <rampart_sct_provider.h>
#include <secconv_security_context_token.h>

#define RAMPART_CLIENT_SECRET_KEY "rampart_client_secret_key"

#ifdef __cplusplus
extern "C"
{
#endif

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_free(rampart_sct_provider_t *sct_provider,
								const axutil_env_t* env)
{
	if (sct_provider)
	{
		if (sct_provider->ops)
		{
			AXIS2_FREE(env->allocator, sct_provider->ops);
		}
		AXIS2_FREE(env->allocator, sct_provider);
	}
	return AXIS2_SUCCESS;
}

AXIS2_EXTERN void* AXIS2_CALL
sct_provider_obtain_token(
    const axutil_env_t* env, 
    axis2_bool_t is_encryption,
    axis2_msg_ctx_t* msg_ctx, 
    axis2_char_t* sct_id,
    int sct_id_type,
    void* user_params)
{
    security_context_token_t* sct = NULL;
    /*rp_security_context_token_t* rp_sct = NULL;*/
    oxs_buffer_t *key_buffer = NULL;
    axis2_char_t *key = NULL;
    axutil_property_t *key_property = NULL;

    sct = security_context_token_create(env);
    if(!sct)
    {
        AXIS2_LOG_INFO(env->log, "[rampart][sct_provider_sample] Cannot create security context token");
        return NULL;
    }

    key_buffer = oxs_buffer_create(env);

    key_property = axis2_msg_ctx_get_property(msg_ctx, env, RAMPART_CLIENT_SECRET_KEY);

    if(key_property)
    {
        key = (axis2_char_t *)axutil_property_get_value(key_property, env); 
    }
    
    if(key)
    {
        oxs_buffer_populate(key_buffer, env, (unsigned char*)key, strlen(key));
    }
    else
    {
        AXIS2_LOG_INFO(env->log, "[rampart][sct_provider_sample] Key is not Set");
        return NULL;
    }

    if(key_buffer)
    {
        security_context_token_set_secret(sct, env, key_buffer);

        if(!sct_id)
        {
            sct_id = oxs_util_generate_id(env,const_cast<axis2_char_t*>("urn:uuid:"));
        }
        security_context_token_set_global_identifier(sct, env, (axis2_char_t*)axutil_strdup(env, sct_id));
        security_context_token_set_local_identifier(sct, env, (axis2_char_t*)axutil_strdup(env, "#sctId-29530019"));

        return sct;
    }
    else
    {
        return NULL;
    }
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_store_token(
    const axutil_env_t *env, 
    axis2_msg_ctx_t* msg_ctx, 
    axis2_char_t *sct_global_id, 
    axis2_char_t *sct_local_id, 
    void *sct, 
    void *user_params)
{
    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_delete_token(
    const axutil_env_t *env, 
    axis2_msg_ctx_t* msg_ctx, 
    axis2_char_t *sct_id, 
    int sct_id_type,
    void* user_params)
{
    /* delete method is not implemented, because we are still not supporting sct cancel function */

    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_validate_token(
    const axutil_env_t *env, 
    axiom_node_t *sct_node, 
    axis2_msg_ctx_t *msg_ctx,
    void *user_params)
{
    /* default implementation does not need to validate anything. We haven't extended the 
     * functionality of sct */

    return AXIS2_SUCCESS;
}

AXIS2_EXTERN void* AXIS2_CALL
sct_provider_get_user_params(
    const axutil_env_t *env)
{
    return NULL;
}

/**
 * Following block distinguish the exposed part of the dll.
 */
AXIS2_EXPORT int
axis2_get_instance(rampart_sct_provider_t **inst,
        const axutil_env_t *env)
{
    rampart_sct_provider_t* sct_provider = NULL;

    sct_provider = (rampart_sct_provider_t*)AXIS2_MALLOC(env->allocator,
            sizeof(rampart_sct_provider_t));

    sct_provider->ops =(rampart_sct_provider_ops_t*)AXIS2_MALLOC(
                env->allocator, sizeof(rampart_sct_provider_ops_t));

    /*assign function pointers*/
	sct_provider->ops->obtain_security_context_token = sct_provider_obtain_token;
    sct_provider->ops->store_security_context_token = sct_provider_store_token;
    sct_provider->ops->delete_security_context_token = sct_provider_delete_token;
    sct_provider->ops->validate_security_context_token = sct_provider_validate_token;
    sct_provider->ops->get_user_params = sct_provider_get_user_params;
    sct_provider->ops->free = sct_provider_free;

    *inst = sct_provider;

    if (!(*inst))
    {
        AXIS2_LOG_INFO(env->log, "[rampart][sct_provider_sample] Cannot initialize the sct provider module");
        return AXIS2_FAILURE;
    }

    return AXIS2_SUCCESS;
}

AXIS2_EXPORT int
axis2_remove_instance(rampart_sct_provider_t *inst,
        const axutil_env_t *env)
{
    axis2_status_t status = AXIS2_FAILURE;
    if (inst)
    {
        status = RAMPART_SCT_PROVIDER_FREE(inst, env);
    }
    return status;
}

#ifdef __cplusplus
}
#endif

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
    <wsp:ExactlyOne>
        <wsp:All>
           <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                <wsp:Policy>
                    <sp:ProtectionToken>
                        <wsp:Policy>
                            <sp:SecurityContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never";>
                                <wsp:Policy>
                                    <!--sp:RequireDerivedKeys/-->
                                </wsp:Policy>
                            </sp:SecurityContextToken>
                        </wsp:Policy>
                    </sp:ProtectionToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict/>
                        </wsp:Policy>
                    </sp:Layout>
                    <sp:IncludeTimestamp/>
                    <sp:EncryptBeforeSigning/>
                    <sp:OnlySignEntireHeadersAndBody/>
                </wsp:Policy>
            </sp:SymmetricBinding>
            <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                <wsp:Policy>
                    <sp:MustSupportRefKeyIdentifier/>
                    <sp:MustSupportRefIssuerSerial/>
                    <sp:MustSupportRefThumbprint/>
                    <sp:MustSupportRefEncryptedKey/>
                </wsp:Policy>
            </sp:Wss11>
            <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                <sp:Header Namespace="http://www.w3.org/2005/08/addressing"/> 
            </sp:SignedParts>
            <rampc:RampartConfig xmlns:rampc="http://ws.apache.org/rampart/c/policy";>
				<rampc:SecurityContextTokenProvider>/usr/local/libsecprv.so</rampc:SecurityContextTokenProvider>
            </rampc:RampartConfig>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
#include <stdio.h>
#include <axutil_string.h>
#include <axutil_utils.h>
#include <oxs_utility.h>
#include <rampart_util.h>
#include <rampart_sct_provider.h>
#include <secconv_security_context_token.h>
#include <string>
#include "client_lib.hxx"
#include "security_controller.h"
#include "xlateutil.hxx"

#ifdef __cplusplus
extern "C"
{
#endif

#ifndef WS_UID
#define WS_UID "UID"
#endif

#ifndef NAMESPACE_PREFIX
#define NAMESPACE_PREFIX "cos"
#endif

#ifndef NAMESPACE_URI
#define NAMESPACE_URI "http://www.xyz.com/cos";
#endif

#ifndef OBTAIN_SEC_TOKEN
#define OBTAIN_SEC_TOKEN "sct_provider_obtain_token"
#endif

#ifndef IN_HEADER_PARAM
#define IN_HEADER_PARAM "GetInputParamFromHeaderByName"
#endif

axiom_element_t* GetRootElement(const axutil_env_t* env,
                                axiom_node_t* rootNode, const char* funcName);


bool GetInputParamByName(const axutil_env_t* env, axiom_node_t* rootNode,
                         axiom_element_t* rootElement, const axis2_char_t* paramName,
                         std::string& paramStr);

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_free(rampart_sct_provider_t *sct_provider,
		const axutil_env_t* env)
{
	if (sct_provider)
	{
		if (sct_provider->ops)
		{
			AXIS2_FREE(env->allocator, sct_provider->ops);
		}
		AXIS2_FREE(env->allocator, sct_provider);
	}
	return AXIS2_SUCCESS;
}

AXIS2_EXTERN void* AXIS2_CALL
sct_provider_obtain_token(
    const axutil_env_t* env,
    axis2_bool_t is_encryption,
    axis2_msg_ctx_t* msg_ctx,
    axis2_char_t* sct_id,
    int sct_id_type,
    void* user_params)
{
	security_context_token_t* sct = NULL;
	axiom_soap_envelope_t *envelope = NULL;
	axiom_soap_header_t *soap_header = NULL;
	axiom_node_t *header_node = NULL;
	std::string combined_id;
	oxs_buffer_t *secretKeyBuffer = NULL;

	envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
	if(envelope)
	{
		soap_header = axiom_soap_envelope_get_header(envelope, env);
	}

	if(soap_header)
	{
		header_node = axiom_soap_header_get_base_node(soap_header, env);
	}

	if(!header_node)
	{
		return NULL;
	}

	axiom_element_t* header_element = GetRootElement(env, header_node,  OBTAIN_SEC_TOKEN);

	if (!header_element)
	{
		return NULL;
	}

	if (false == GetInputParamByName(env, header_node, header_element,
	    WS_UID, combined_id))
	{
		AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] Could not retrieve the UID from the header.");
		return NULL;
	}

	std::string groupId;
	std::string subGroupId;
	std::string user_id;

        std::vector<std::string> idPair;
        Xlate::SplitString(combined_id, "/", idPair);

	groupId = GetGroupId();
        if(1 == idPair.size())
        {
		AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] SubGroupId not found in the header. Using GroupID instead....");
                subGroupId = groupId;
                user_id = idPair[0];
        }
        else if(2 == idPair.size())
        {
                subGroupId = idPair[0];
                user_id = idPair[1];
        }
        else
        {
		AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] Could not parse the UID/SubGroupId from the header.");
                return NULL;
        }



	secretKeyBuffer = oxs_buffer_create(env);

	if(false == user_id.empty())
	{
		std::string secretKey = getKey(groupId + ":" + subGroupId + ":" + user_id, LB_WEB_SERV, groupId, subGroupId);

		if(false == secretKey.empty())
		{
			int realLen = 0;
    			char *realKey = Xlate::Base64Decode((unsigned char*)secretKey.c_str(), secretKey.length(), &realLen);
			oxs_buffer_populate(secretKeyBuffer, env, (unsigned char*)realKey, realLen);
		}
		else
		{
			AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] Could not retrieve the secret key for the specified Principal ID.");
			return NULL;
		}
	}
	else
	{
		AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] Could not retrieve the Principal ID from the header.");
		return NULL;
	}

	if(secretKeyBuffer)
	{
		sct = security_context_token_create(env);
		if(!sct)
		{
			AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] Could not create security context token");
			return NULL;
		}
		security_context_token_set_secret(sct, env, secretKeyBuffer);

		if(!sct_id)
		{
			sct_id = oxs_util_generate_id(env,const_cast<char *>("urn:uuid:"));
		}

		security_context_token_set_global_identifier(sct, env, (axis2_char_t *)axutil_strdup(env, sct_id));

		security_context_token_set_local_identifier(sct, env, (axis2_char_t *)axutil_strdup(env, "#sctId-29530019"));

		return sct;
	}
	else
	{
		AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sct_provider] secretKeyBuffer was NULL.");
		return NULL;
	}
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_store_token(
    const axutil_env_t *env,
    axis2_msg_ctx_t* msg_ctx,
    axis2_char_t *sct_global_id,
    axis2_char_t *sct_local_id,
    void *sct,
    void *user_params)
{
    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_delete_token(
    const axutil_env_t *env,
    axis2_msg_ctx_t* msg_ctx,
    axis2_char_t *sct_id,
    int sct_id_type,
    void* user_params)
{
    /* delete method is not implemented, because we are still not supporting sct cancel function */

    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
sct_provider_validate_token(
    const axutil_env_t *env,
    axiom_node_t *sct_node,
    axis2_msg_ctx_t *msg_ctx,
    void *user_params)
{
    /* default implementation does not need to validate anything. We haven't extended the
     * functionality of sct */

    return AXIS2_SUCCESS;
}

AXIS2_EXTERN void* AXIS2_CALL
sct_provider_get_user_params(
    const axutil_env_t *env)
{
    return NULL;
}


/**
 * Following block distinguish the exposed part of the dll.
 */
AXIS2_EXPORT int
axis2_get_instance(rampart_sct_provider_t **inst,
        const axutil_env_t *env)
{
	rampart_sct_provider_t* sct_provider = NULL;

	sct_provider = (rampart_sct_provider_t *)AXIS2_MALLOC(env->allocator,
		sizeof(rampart_sct_provider_t));

	sct_provider->ops = (rampart_sct_provider_ops_t*)AXIS2_MALLOC(
		env->allocator, sizeof(rampart_sct_provider_ops_t));

	/*assign function pointers*/
	sct_provider->ops->obtain_security_context_token = sct_provider_obtain_token;
    sct_provider->ops->store_security_context_token = sct_provider_store_token;
    sct_provider->ops->delete_security_context_token = sct_provider_delete_token;
    sct_provider->ops->validate_security_context_token = sct_provider_validate_token;
    sct_provider->ops->get_user_params = sct_provider_get_user_params;
    sct_provider->ops->free = sct_provider_free;

	*inst = sct_provider;

	if (!(*inst))
	{
		AXIS2_LOG_INFO(env->log, "[rampart][sct_provider_sample] Cannot initialize the sct provider module");
		return AXIS2_FAILURE;
	}

	return AXIS2_SUCCESS;
}

AXIS2_EXPORT int
axis2_remove_instance(rampart_sct_provider_t *inst,
        const axutil_env_t *env)
{
	axis2_status_t status = AXIS2_FAILURE;
	if (inst)
	{
		status = RAMPART_SCT_PROVIDER_FREE(inst, env);
	}
	return status;
}

axiom_element_t* GetRootElement(const axutil_env_t* env,
	axiom_node_t* rootNode, const char* funcName)
{
	if (!rootNode)
	{
		return NULL;
	}

	axiom_element_t* rootElement = (axiom_element_t*)
		axiom_node_get_data_element(rootNode, env);

	if (!rootElement)
	{
		return NULL;
	}

	return rootElement;
}

bool GetInputParamByName(const axutil_env_t* env, axiom_node_t* rootNode,
	axiom_element_t* rootElement, const axis2_char_t* paramName,
	std::string& paramStr)
{
	axutil_qname_t* paramQname = axutil_qname_create(env, paramName,
					NAMESPACE_URI, NAMESPACE_PREFIX);
	axiom_node_t* paramNode = NULL;
	axiom_element_t* paramElement =
		axiom_element_get_first_child_with_qname(rootElement, env,
		paramQname, rootNode, &paramNode);
	axutil_qname_free(paramQname, env);

	if((paramNode) && (paramElement))
	{
		axis2_char_t* value = axiom_element_get_text(paramElement, env,
					paramNode);
		if (NULL != value)
		{
			paramStr = value;
			value = NULL;
		}
	}
	else
	{
            // noop
	}

	return true;
}

#ifdef __cplusplus
}
#endif
<serviceGroup name="V1">
    <service name="object">

      <parameter name="MTOMCachingCallback" locked="false">/usr/local/libcachingcallback.so</parameter>
      <parameter name="MTOMSendingCallback" locked="false">/usr/local/libsendingcallback.so</parameter>

      <parameter name="wsdl_path">/usr/local/axis2c/services/V1/objectws.wsdl</parameter>
      <parameter name="ServiceClass" locked="xsd:false">mod_soap</parameter>

      <!-- these parameters exist in the metadata service as well
           they *must* be changed in *both* places! --> 
      <parameter name="VersionObject">On</parameter>
      <parameter name="QueryObjects">Off</parameter>


      <description>
	this belongs to the V1 service group.
      </description>

	<module ref="rampart"/>

	<operation name="CreateObject">
		<parameter name="wsamapping">http://www.xyz.com/cos/ObjectWS/CreateObject</parameter>
		<message label="in">
			<wsp:Policy wsu:Id="SigEncrMessage" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
				<sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<sp:Body />
				</sp:SignedParts>
			</wsp:Policy>
		</message>
		<message label="out" />
	</operation>
		
	<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
		<wsp:ExactlyOne>
			<wsp:All>
				<sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<wsp:Policy>
						<sp:ProtectionToken>
							<wsp:Policy>
								<sp:SecurityContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never";>
									<wsp:Policy>
										<!--sp:RequireDerivedKeys/-->
									</wsp:Policy>
								</sp:SecurityContextToken>
							</wsp:Policy>
						</sp:ProtectionToken>
						<sp:AlgorithmSuite>
							<wsp:Policy>
								<sp:Basic256/>
							</wsp:Policy>
						</sp:AlgorithmSuite>
						<sp:Layout>
							<wsp:Policy>
								<sp:Strict/>
							</wsp:Policy>
						</sp:Layout>
						<sp:IncludeTimestamp/>
						<sp:EncryptBeforeSigning/>
						<sp:OnlySignEntireHeadersAndBody/>
					</wsp:Policy>
				</sp:SymmetricBinding>
				<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<wsp:Policy>
						<sp:MustSupportRefKeyIdentifier/>
						<sp:MustSupportRefEmbeddedToken/>
						<sp:MustSupportRefIssuerSerial/>
					</wsp:Policy>
				</sp:Wss10>

				<rampc:RampartConfig xmlns:rampc="http://ws.apache.org/rampart/c/policy";>
					<rampc:SecurityContextTokenProvider>/usr/local/libsec_soap.so</rampc:SecurityContextTokenProvider>
				</rampc:RampartConfig>
			</wsp:All>
		</wsp:ExactlyOne>
	</wsp:Policy>

    </service>

    <service name="metadata">

      <parameter name="MTOMCachingCallback" locked="false">/usr/local/libcachingcallback.so</parameter>
      <parameter name="MTOMSendingCallback" locked="false">/usr/local/libsendingcallback.so</parameter>

      <parameter name="wsdl_path">/usr/local/axis2c/services/V1/metadataws.wsdl</parameter>
      <parameter name="ServiceClass" locked="xsd:false">mod_soap</parameter>

      <!-- these parameters exist in the object service as well
           they *must* be changed in *both* places! --> 
      <parameter name="VersionObject">On</parameter>
      <parameter name="QueryObjects">Off</parameter>


      <description>
	this belongs to the V1 service group.
      </description>

	<module ref="rampart"/>
	
	<operation name="ListObjects">
		<parameter name="wsamapping">http://www.xyz.com/cos/MetadataWS/ListObjects</parameter>
		<message label="in">
			<wsp:Policy wsu:Id="SigEncrMessage" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
				<sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<sp:Body />
				</sp:SignedParts>
			</wsp:Policy>
		</message>
		<message label="out" />
	</operation>
	
	<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
		<wsp:ExactlyOne>
			<wsp:All>
				<sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<wsp:Policy>
						<sp:ProtectionToken>
							<wsp:Policy>
								<sp:SecurityContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never";>
									<wsp:Policy>
										<!--sp:RequireDerivedKeys/-->
									</wsp:Policy>
								</sp:SecurityContextToken>
							</wsp:Policy>
						</sp:ProtectionToken>
						<sp:AlgorithmSuite>
							<wsp:Policy>
								<sp:Basic256/>
							</wsp:Policy>
						</sp:AlgorithmSuite>
						<sp:Layout>
							<wsp:Policy>
								<sp:Strict/>
							</wsp:Policy>
						</sp:Layout>
						<sp:IncludeTimestamp/>
						<sp:EncryptBeforeSigning/>
						<sp:OnlySignEntireHeadersAndBody/>
					</wsp:Policy>
				</sp:SymmetricBinding>
				<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
					<wsp:Policy>
						<sp:MustSupportRefKeyIdentifier/>
						<sp:MustSupportRefEmbeddedToken/>
						<sp:MustSupportRefIssuerSerial/>
					</wsp:Policy>
				</sp:Wss10>

				<rampc:RampartConfig xmlns:rampc="http://ws.apache.org/rampart/c/policy";>
					<rampc:SecurityContextTokenProvider>/usr/local/libsec_soap.so</rampc:SecurityContextTokenProvider>
				</rampc:RampartConfig>
			</wsp:All>
		</wsp:ExactlyOne>
	</wsp:Policy>
    </service>

</serviceGroup>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to