The Shibboleth IdP V4 software will leave support on September 1, 2024.

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Namespace: urn:mace:shibboleth:2.0:resolver
Schema: http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd

Overview

The <ResponseMapping> element provides an instance of the HTTPResponseMappingStrategy interface that produces result attributes from a web service response, in real time, using a script. The supplied script is expected to consume the HttpResponse instance and produce any desired results. It may raise exceptions if necessary.

For simple use cases, the HttpClientSupport class includes a number of toString methods that can translate the entire response into a string using appropriate character set handling and while enforcing size limits. This supports chunked responses for which the server doesn't know the actual size ahead of time, which is common with web services.

In addition, note that Javascript interpreters include a JSON object that automates the parsing of JSON data.

Reference

The <ResponseMapping> element is a configuration element of type ScriptType.

The following sections describe the attributes and elements of the ScriptType type.

Example

The example illustrates a JSON-based web service. Some of the error handling in the JSON structure is elided, but it illustrates that the response data can be trivially turned into native Javascript objects with a couple of lines of code, and the rest is mechanical.

Example processing a JSON response
<ResponseMapping>
	<Script>
	<![CDATA[
	var HashSet = Java.type("java.util.HashSet");
	var HttpClientSupport = Java.type("net.shibboleth.utilities.java.support.httpclient.HttpClientSupport");
	var IdPAttribute = Java.type("net.shibboleth.idp.attribute.IdPAttribute");
	var StringAttributeValue = Java.type("net.shibboleth.idp.attribute.StringAttributeValue");
 
	// Limits length to 64k
	var body = HttpClientSupport.toString(response.getEntity(), "UTF-8", 65536);
	var result = JSON.parse(body);

	var attr = new IdPAttribute("grouperGroup");
	var values = new HashSet();
	if (result.wsGroups != null) {
		for (var i=0; i<result.wsGroups.length; i++) {
			values.add(new StringAttributeValue(result.wsGroups[i].name));
		}
	}
	attr.setValues(values);
	]]>
	</Script>
</ResponseMapping>
  • No labels