Changeset 7458


Ignore:
Timestamp:
08/09/10 15:58:46 (9 years ago)
Author:
pjkersha
Message:

First working version for resolver - resolves an e-mail address from an OpenID. TODO:

  • Add SSL client cert to SSL context so that server can authenticate
  • separate X.509 trust managers for Yadis and Attribute Service calls - they are likely to have separate SSL configurations: DN whitelists and trust stores. Also, Yadis retrieval is not likely to need SSL client authn.
Location:
TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security
Files:
1 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/DnWhitelistX509TrustMgr.properties

    r7309 r7458  
    1414# @author pjkersha 
    1515# @version $Revision$ 
     16org.earthsystemgrid.security.DnWhitelistX509TrustMgr.keyStoreFilePath = /home/pjkersha/workspace/EsgYadisParser/src/org/earthsystemgrid/security/yadis/test.ks 
     17org.earthsystemgrid.security.DnWhitelistX509TrustMgr.keyStorePassphrase = testpass 
    1618org.earthsystemgrid.security.DnWhitelistX509TrustMgr.dn0 = CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB 
    17 org.earthsystemgrid.security.DnWhitelistX509TrustMgr.dn1 = CN=localhost, OU=Test, O=Test Org 
     19org.earthsystemgrid.security.DnWhitelistX509TrustMgr.dn1 = CN=localhost, OU=Security, O=NDG 
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/openid2emailresolution/OpenId2EmailAddrResolution.java

    r7453 r7458  
    55import java.io.InputStream; 
    66import java.io.InputStreamReader; 
     7import java.io.OutputStream; 
     8import java.io.OutputStreamWriter; 
    79import java.net.MalformedURLException; 
     10import java.net.ProtocolException; 
    811import java.net.URL; 
    912import java.security.KeyManagementException; 
     
    1114import java.security.NoSuchAlgorithmException; 
    1215import java.security.cert.CertificateException; 
     16import java.util.ArrayList; 
    1317import java.util.Arrays; 
    1418import java.util.Collections; 
     
    1721import java.util.Set; 
    1822 
     23import javax.mail.internet.AddressException; 
    1924import javax.mail.internet.InternetAddress; 
    2025import javax.net.ssl.HttpsURLConnection; 
     
    2429 
    2530import esg.saml.attr.service.impl.SAMLAttributeServiceClientSoapImpl; 
     31import esg.saml.attr.service.impl.SAMLAttributesImpl; 
     32import esg.saml.common.SAMLBuilder; 
     33import esg.saml.common.SAMLParameters; 
     34 
     35import org.opensaml.saml2.core.Attribute; 
     36import org.opensaml.saml2.core.impl.AttributeBuilder; 
     37import org.opensaml.saml2.core.impl.AttributeImpl; 
    2638import org.opensaml.xml.io.MarshallingException; 
     39import org.opensaml.xml.io.UnmarshallingException; 
     40import org.opensaml.xml.parse.XMLParserException; 
    2741 
    2842import org.earthsystemgrid.security.DnWhitelistX509TrustMgr; 
     
    105119        } 
    106120         
    107         /* 
     121        /** 
    108122         * Call Attribute Service to retrieve user's e-mail address 
     123         *  
     124         * @param attributeServiceEndpoint 
     125         * @param openidURL 
     126         * @return 
     127         * @throws AttributeServiceQueryException 
    109128         */ 
    110129        protected InternetAddress queryAttributeService(URL attributeServiceEndpoint, 
    111130                        URL openidURL) throws AttributeServiceQueryException 
    112131        { 
    113                 String issuer = "my issuer"; 
     132                String issuer = "CN=localhost, OU=Security, O=NDG"; 
    114133                SAMLAttributeServiceClientSoapImpl attributeServiceClient =  
    115134                        new SAMLAttributeServiceClientSoapImpl(issuer); 
    116135                 
    117136                // Create query 
     137                AttributeBuilder attributeBuilder = new AttributeBuilder(); 
     138                Attribute emailAttribute = attributeBuilder.buildObject(); 
     139                emailAttribute.setName(SAMLParameters.EMAIL_ADDRESS); 
     140                emailAttribute.setFriendlyName(SAMLParameters.EMAIL_ADDRESS_FRIENDLY); 
     141                emailAttribute.setNameFormat("http://www.w3.org/2001/XMLSchema#string"); 
     142                 
     143                List<Attribute> attributes = new ArrayList<Attribute>(); 
     144                attributes.add(emailAttribute); 
     145                 
    118146                String query = null; 
    119147                try { 
    120                         query = attributeServiceClient.buildAttributeRequest(openidURL.toString()); 
     148                        query = attributeServiceClient.buildAttributeRequest( 
     149                                        openidURL.toString(), attributes); 
     150                         
    121151                } catch (MarshallingException e) { 
    122152                        throw new AttributeServiceQueryException("Marshalling attribute " + 
     
    148178                } 
    149179                connection.setSSLSocketFactory(socketFactory); 
    150                                  
     180                connection.setDoOutput(true); 
     181                 
     182                try { 
     183                        connection.setRequestMethod("POST"); 
     184                } catch (ProtocolException e) { 
     185                        throw new AttributeServiceQueryException( 
     186                                        "Setting HTTP request method to \"POST\"", e); 
     187                } 
     188                 
     189                OutputStream ops = null; 
     190                try { 
     191                        ops = connection.getOutputStream(); 
     192                } catch (IOException e) { 
     193                        throw new AttributeServiceQueryException( 
     194                                "Getting output stream for attribute query", e); 
     195                } 
     196                 
     197                OutputStreamWriter osw = new OutputStreamWriter(ops); 
     198                try { 
     199                        osw.write(query); 
     200                        osw.flush(); 
     201                        osw.close(); 
     202                } catch (IOException e) { 
     203                        throw new AttributeServiceQueryException( 
     204                                "Error writing attribute query for dispatch", e); 
     205                } 
     206                 
    151207                InputStream ins = null; 
    152208                try { 
     
    155211                        throw new AttributeServiceQueryException("Getting input stream", e); 
    156212                } 
     213                 
    157214            InputStreamReader isr = new InputStreamReader(ins); 
    158215            BufferedReader in = new BufferedReader(isr); 
     
    161218 
    162219            try { 
    163                         while ((inputLine = in.readLine()) != null) 
    164                         { 
     220                        while ((inputLine = in.readLine()) != null) { 
    165221                            buf.append(inputLine); 
    166222                            buf.append(System.getProperty("line.separator")); 
     
    171227                } 
    172228 
    173             return buf.toString(); 
    174                  
    175                 return null; 
    176         } 
     229                /* 
     230                 * Parse the response 
     231                 */ 
     232                String response = buf.toString(); 
     233                SAMLAttributesImpl samlAttrs = null; 
     234                try { 
     235                        samlAttrs = (SAMLAttributesImpl)  
     236                                attributeServiceClient.parseAttributeResponse(response); 
     237                         
     238                } catch (XMLParserException e) { 
     239                        throw new AttributeServiceQueryException( 
     240                                        "Parsing attribute query response", e); 
     241                } catch (UnmarshallingException e) { 
     242                        throw new AttributeServiceQueryException( 
     243                                        "Unmarshalling attribute query response", e); 
     244                } 
     245                 
     246                String sEmail = samlAttrs.getEmail(); 
     247                if (sEmail == null) { 
     248                        throw new AttributeServiceQueryException( 
     249                                        "Error retrieving e-mail address for user " + openidURL + 
     250                                        " from Attribute Service " + attributeServiceEndpoint); 
     251                } 
     252                 
     253                InternetAddress email; 
     254                try { 
     255                        email = new InternetAddress(sEmail); 
     256                } catch (AddressException e) { 
     257                        throw new AttributeServiceQueryException( 
     258                                        "Error parsing e-mail address", e); 
     259                } 
     260            return email; 
     261        } 
     262         
    177263        public static void main(String[] args) throws IOException,  
    178264                NoMatchingXrdsServiceException,  
     
    181267                AttributeServiceQueryException 
    182268        { 
    183                 OpenId2EmailAddrResolution openid2EmailAddr = new OpenId2EmailAddrResolution(); 
     269                // Input DNs from a file 
     270                InputStream propertiesFile =  
     271                        DnWhitelistX509TrustMgr.class.getResourceAsStream( 
     272                                                                "DnWhitelistX509TrustMgr.properties"); 
     273 
     274                OpenId2EmailAddrResolution openid2EmailAddr = new  
     275                        OpenId2EmailAddrResolution(propertiesFile); 
    184276                 
    185277//              URL yadisURL = new URL("https://ceda.ac.uk/openid/Philip.Kershaw"); 
    186                 URL yadisURL = new URL("https://localhost:7443/openid/PJKershaw"); 
    187                 InternetAddress emailAddr = null; 
    188                 emailAddr = openid2EmailAddr.resolve(yadisURL); 
     278                URL yadisURL = new URL("https://localhost:7443/openid/philip.kershaw"); 
     279 
     280                InternetAddress email; 
     281                email = openid2EmailAddr.resolve(yadisURL); 
     282                System.out.println("OpenID: " + yadisURL.toString() + " resolves to " + 
     283                                "e-mail address: " + email.toString()); 
    189284        } 
    190285} 
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/yadis

    • Property svn:ignore set to
      d573507a.der
      test.ks
Note: See TracChangeset for help on using the changeset viewer.