Author: prabath
Date: Sat Jan 5 22:07:05 2008
New Revision: 11869
Log:
OpenID integration
Added:
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java
Added:
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java
==============================================================================
--- (empty file)
+++
trunk/solutions/identity/modules/identity-provider/src/main/java/org/wso2/solutions/identity/sts/OpenIdTokenIssuer.java
Sat Jan 5 22:07:05 2008
@@ -0,0 +1,152 @@
+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.IdentityProviderConstants;
+import org.wso2.solutions.identity.IdentityProviderException;
+import org.wso2.solutions.identity.sts.IdentityProviderData.RequestedClaimData;
+
+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;
+ }
+
+ /**
+ *
+ * @param rstrElem
+ * @return
+ */
+ 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:http://localhost:12080/user/prabath\n";
+ text += "openid.response_nonce:2007-12-14T09:25:50Z0\n";
+ text += "openid.mode:id_res\n";
+ text += "openid.identity:http://localhost:12080/user/prabath\n";
+ text += "openid.return_to:https://openidcards.sxip.com/demorp/\n";
+ 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\n";
+ text += "openid.ext1.mode:fetch_response\n";
+ text +=
"openid.ext1.type.FullName:http://axschema.org/namePerson/fullname\n";
+ text += "openid.ext1.value.FullName:"
+ + ((RequestedClaimData) ipData.requestedClaims
+ .get(IdentityProviderConstants.ATTR_NS_SURNAME)).value
+ + "\n";
+ text +=
"openid.ext1.type.NickName:http://axschema.org/namePerson/nickname\n";
+ text += "openid.ext1.value.NickName:"
+ + ((RequestedClaimData) ipData.requestedClaims
+
.get(IdentityProviderConstants.ATTR_NS_GIVEN_NAME)).value
+ + "\n";
+ text += "openid.ext1.type.Email:http://axschema.org/contact/email\n";
+ text += "openid.ext1.value.Email:"
+ + ((RequestedClaimData) ipData.requestedClaims
+
.get(IdentityProviderConstants.ATTR_NS_EMAIL_ADDRESS)).value
+ + "\n";
+
+ rdt.setText(text);
+
+ return rdt;
+ }
+
+}
_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev