Author: prabath
Date: Mon Dec 17 10:10:10 2007
New Revision: 11280

Log:

Handles OpenID Token issue

Added:
   
branches/solutions/identity/openid-poc/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java

Added: 
branches/solutions/identity/openid-poc/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java
==============================================================================
--- (empty file)
+++ 
branches/solutions/identity/openid-poc/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java
       Mon Dec 17 10:10:10 2007
@@ -0,0 +1,131 @@
+package org.wso2.solutions.identity.sts;
+
+import java.io.ByteArrayInputStream;
+import java.text.DateFormat;
+import java.util.Date;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axis2.context.MessageContext;
+import org.apache.rahas.RahasConstants;
+import org.apache.rahas.RahasData;
+import org.apache.rahas.Token;
+import org.apache.rahas.TrustException;
+import org.apache.rahas.TrustUtil;
+import org.apache.ws.security.message.WSSecEncryptedKey;
+import org.apache.ws.security.util.XmlSchemaDateFormat;
+import org.opensaml.SAMLAssertion;
+import org.opensaml.SAMLException;
+
+import org.w3c.dom.Document;
+
+import org.wso2.solutions.identity.IdentityProviderException;
+
+
+public class OpenIdTokenIssuer extends IdentityTokenIssuer{
+       
+               
+       protected OMElement createRSTR(RahasData data, Date notBefore, Date 
notAfter,
+                       SOAPEnvelope env, Document doc, SAMLAssertion assertion,
+                       WSSecEncryptedKey encryptedKey) throws TrustException,
+                       SAMLException, IdentityProviderException {
+               
+               int wstVersion = data.getVersion();
+               MessageContext inMsgCtx = data.getInMessageContext();
+
+               OMElement rstrElem = TrustUtil
+                               
.createRequestSecurityTokenResponseElement(wstVersion, env
+                                               .getBody());
+               TrustUtil.createTokenTypeElement(wstVersion, rstrElem).setText(
+                               data.getTokenType());
+               
+               createDisplayToken(rstrElem, ipData);
+
+               OMElement appliesToEpr = null;
+               if (encryptedKey != null) {
+                       int keysize = data.getKeysize();
+                       if (keysize == -1) {
+                               keysize = encryptedKey.getEphemeralKey().length 
* 8;
+                       }
+
+                       TrustUtil.createKeySizeElement(wstVersion, rstrElem, 
keysize);
+
+                       OMElement incomingAppliesToEpr = data.getAppliesToEpr();
+                       try {
+                               Document eprDoc = 
DocumentBuilderFactory.newInstance()
+                                               .newDocumentBuilder().parse(
+                                                               new 
ByteArrayInputStream(incomingAppliesToEpr
+                                                                               
.toString().getBytes()));
+                               appliesToEpr = (OMElement) doc.importNode(eprDoc
+                                               .getDocumentElement(), true);
+                       } catch (Exception e) {
+                               new 
TrustException(TrustException.REQUEST_FAILED, e);
+                       }
+
+                       OMElement appliesToElem = rstrElem
+                                       .getOMFactory()
+                                       .createOMElement(
+                                                       new QName(
+                                                                       
RahasConstants.WSP_NS,
+                                                                       
RahasConstants.IssuanceBindingLocalNames.APPLIES_TO,
+                                                                       
RahasConstants.WSP_PREFIX), rstrElem);
+                       appliesToElem.addChild(appliesToEpr);
+               }
+
+               // Use GMT time in milliseconds
+               DateFormat zulu = new XmlSchemaDateFormat();
+
+               // Add the Lifetime element
+               TrustUtil.createLifetimeElement(wstVersion, rstrElem, zulu
+                               .format(notBefore), zulu.format(notAfter));
+
+               OMElement reqSecTokenElem = TrustUtil
+                               
.createRequestedSecurityTokenElement(wstVersion, rstrElem);
+               
+               createOpenIdToken(reqSecTokenElem);
+               createAttachedRef(rstrElem, assertion.getId());
+               createUnattachedRef(rstrElem, assertion.getId());
+
+               // Store the Token
+               Token assertionToken = new Token(assertion.getId(), (OMElement) 
doc
+                               .importNode(assertion.toDOM(), true), 
notBefore, notAfter);
+
+               // At this point we definitely have the secret
+               // Otherwise it should fail with an exception earlier
+               assertionToken.setSecret(data.getEphmeralKey());
+               TrustUtil.getTokenStore(inMsgCtx).add(assertionToken);
+               
+               return rstrElem;
+       }
+       
+       
+       private OMElement createOpenIdToken(OMElement rstrElem)
+       {
+                 OMElement rdt = IdentityProviderUtil.createOpenIdToken(
+                               rstrElem, ipData);
+                        
+          String text = null;
+          
+          // TODO: need to build the OpenID Token          
+          text =  "openid.ns:http://specs.openid.net/auth/2.0 \n";
+          text += "openid.op_endpoint:https://openidcards.sxip.com/op/ \n";
+          text += "openid.claimed_id:https://openidcards.sxip.com/i/prabath v";
+          text += "openid.response_nonce:2007-12-14T09:25:50Z0 \n";
+          text += "openid.mode:id_res \n";
+          text += "openid.identity:https://openidcards.sxip.com/i/prabath \n";
+          text += "openid.return_to:https://openidcards.sxip.com/demorp/";;
+          text += "openid.assoc_handle:e242741d76b42a6 \n";
+          text += 
"openid.signed:op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle
 \n";
+          text += "openid.sig:ug3AMXHi6fnBDNk1ey0TyP+GI5o= \n";
+          text += "openid.ns.ext1:http://openid.net/srv/ax/1.0-draft4 \n";
+          text += "openid.ext1.mode:fetch_response";
+
+          rdt.setText(text);
+          
+          return rdt;
+       }
+
+}

_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev

Reply via email to