aboutsummaryrefslogtreecommitdiff
path: root/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java')
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java93
1 files changed, 90 insertions, 3 deletions
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java
index cdc0a9914..4af35e325 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/requestHandler/AuthnRequestHandler.java
@@ -3,22 +3,109 @@ package at.gv.egovernment.moa.id.protocols.pvp2x.requestHandler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.joda.time.DateTime;
+import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml2.core.ArtifactResponse;
+import org.opensaml.saml2.core.Assertion;
+import org.opensaml.saml2.core.AuthnContext;
+import org.opensaml.saml2.core.AuthnContextClassRef;
import org.opensaml.saml2.core.AuthnRequest;
+import org.opensaml.saml2.core.AuthnStatement;
+import org.opensaml.saml2.core.BaseID;
+import org.opensaml.saml2.core.Issuer;
+import org.opensaml.saml2.core.NameID;
import org.opensaml.saml2.core.RequestAbstractType;
+import org.opensaml.saml2.core.Subject;
+import org.opensaml.ws.message.encoder.MessageEncodingException;
+import org.opensaml.xml.security.SecurityException;
+
+import edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.StoredIDStore.PersistentIdEntry;
+
+import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;
+import at.gv.egovernment.moa.id.moduls.AuthenticationManager;
+import at.gv.egovernment.moa.id.moduls.AuthenticationSessionStore;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.IEncoder;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.MOARequest;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.PostBinding;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.RedirectBinding;
+import at.gv.egovernment.moa.id.protocols.pvp2x.utils.SAML2Utils;
+import at.gv.egovernment.moa.id.util.HTTPUtils;
public class AuthnRequestHandler implements IRequestHandler {
- public boolean handleObject(RequestAbstractType obj) {
- return (obj instanceof AuthnRequest);
+ public boolean handleObject(MOARequest obj) {
+ return (obj.getSamlRequest() instanceof AuthnRequest);
}
- public void process(RequestAbstractType obj, HttpServletRequest req,
+ public void process(MOARequest obj, HttpServletRequest req,
HttpServletResponse resp) {
if(!handleObject(obj)) {
// TODO: throw exception
return;
}
+ AuthnRequest authnRequest = (AuthnRequest)obj.getSamlRequest();
+
+ Assertion assertion = SAML2Utils.createSAMLObject(Assertion.class);
+
+ AuthnContextClassRef authnContextClassRef = SAML2Utils.createSAMLObject(AuthnContextClassRef.class);
+ authnContextClassRef.setAuthnContextClassRef(AuthnContext.SMARTCARD_PKI_AUTHN_CTX);
+
+ AuthnContext authnContext = SAML2Utils.createSAMLObject(AuthnContext.class);
+ authnContext.setAuthnContextClassRef(authnContextClassRef);
+
+ AuthnStatement authnStatement = SAML2Utils.createSAMLObject(AuthnStatement.class);
+
+ authnStatement.setAuthnInstant(new DateTime());
+ authnStatement.setAuthnContext(authnContext);
+
+ assertion.getAuthnStatements().add(authnStatement);
+
+ AuthenticationSession authSession =
+ AuthenticationManager.getAuthenticationSession(req.getSession());
+
+ Subject subject = SAML2Utils.createSAMLObject(Subject.class);
+ NameID subjectNameID = SAML2Utils.createSAMLObject(NameID.class);
+ subjectNameID.setFormat(NameID.PERSISTENT);
+ subjectNameID.setValue(authSession.getAuthData().getIdentificationValue());
+ subject.setNameID(subjectNameID);
+
+ Issuer issuer = SAML2Utils.createSAMLObject(Issuer.class);
+ issuer.setValue("pvpIDP");
+ assertion.setIssuer(issuer);
+ assertion.setSubject(subject);
+
+ ArtifactResponse authResponse = SAML2Utils.createSAMLObject(ArtifactResponse.class);
+
+ Issuer nissuer = SAML2Utils.createSAMLObject(Issuer.class);
+ nissuer.setValue("pvpIDP");
+ authResponse.setIssuer(nissuer);
+ authResponse.setInResponseTo(authnRequest.getID());
+ authResponse.setMessage(assertion);
+ authResponse.setStatus(SAML2Utils.getSuccessStatus());
+
+ Integer aIdx = authnRequest.getAssertionConsumerServiceIndex();
+ int idx = 0;
+
+ if(aIdx != null) {
+ idx = aIdx.intValue();
+ }
+
+ String oaURL = obj.getEntityMetadata().
+ getSPSSODescriptor(SAMLConstants.SAML20P_NS).
+ getAssertionConsumerServices().get(idx).getLocation();
+
+ IEncoder binding = new PostBinding();
+ try {
+ binding.encodeRespone(req, resp, authResponse, oaURL);
+ } catch (MessageEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (SecurityException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
System.out.println("AuthnRequest");
}