The Shibboleth V1 software has reached its End of Life and is no longer supported. This documentation is available for historical purposes only.

ActiveDirectoryInstallerObjectSID

There is an issue when using binary attributes from an LDAP and Shibboleth 1.3; The reasons for this are documented elsewhere, but the result an IdP may issue the same eduPersonTargettedId for two users (with different SIDS).

The current version of the installer handles this issue correctly, but if you installed a from a version prior to the one dated 5th December 2008 you need to change your installation.

As a result of this change the eduPersonTargettedId issued by your IdP for a specific user will now be different, and each user will need to reapply and personalization required

All changes will be made to one file, the resolver.xml file. This will usually be

C:\Program files\Internet2\idp\resolver.xml

You need to make three changes:

1. Declare a new internal attribute to contain the SID encoded as base64

Find these lines in resolver .xml

        <!--  eduPersonEntitlement

            This is purely example code on how to look in the
            membership of a user for a specific group (in this case
            "Student" and use that to export a specific
            entitlement ("https://foo.com").  -->

Immediately above, paste in this code:

     <!-- SIDAsBase64 
          The ObjectSid comes over as binary.  The LDAP Connector 
          can drop the last few octets from time 
          to time when converting to a string.  Hence before we can drop
          this into ePTID below we have to Base64-ize it.
      -->

     <ScriptletAttributeDefinition id="SIDAsBase64">
       <DataConnectorDependency requires="directory"/>

         <Scriptlet><![CDATA[
	    import org.bouncycastle.util.encoders.Base64;

            resolvedAttributes = dependencies.getConnectorResolution("directory");
           
            Attribute id =  resolvedAttributes.get("objectSid");
            String b64id = new String(Base64.encode(id.get(0)));

           resolverAttribute.addValue(b64id);
         ]]></Scriptlet>
     </ScriptletAttributeDefinition>	

This code declares a new Attribute called SIDAsBase64, which is the SID, extracted as a binary stream (we'll do this below) and encoded using a library already used elsewhere in the IdP.

2. Change the ePTID declaration to use the new attribute

Find the declaration of eduPersonTargetedID. It will look like this:

	<PersistentIDAttributeDefinition 
		          id="urn:mace:dir:attribute-def:eduPersonTargetedID"
		          scope="foo.ac.uk"
		          sourceName = "objectSid"> 
		           <DataConnectorDependency requires="directory"/>
		            <Salt>{GUID}</Salt>
	</PersistentIDAttributeDefinition>

Change this block so that it looks like this (replacing the scope and the salt with the original values:

	<PersistentIDAttributeDefinition 
             		id="urn:mace:dir:attribute-def:eduPersonTargetedID"
             		scope="foo.ac.uk"> 
    		<AttributeDependency requires="SIDAsBase64"/>
    		<Salt>GUID</Salt>
	</PersistentIDAttributeDefinition>

3. Declare objectSid as binary.

Find the definition of JNDIDirectoryDataConnector. Add this line towards the end, below the password and above the </JNDIDirectoryDataConnector> line:

	
        <Property name="java.naming.ldap.attributes.binary"
		 value="objectSid objectGUID"/>

The last few lines of the definition will look like this:

  	<Property name="java.naming.security.principal" 
           		value="ldap@foo.ac.uk" />
 	<Property name="java.naming.security.credentials" 
           		value="T0PSeCret" />
 	<Property name="java.naming.ldap.attributes.binary" 
           		value="objectSid objectGUID"/>

	</JNDIDirectoryDataConnector>

4. And finally

Restart Tomcat and test.