Package org.picketlink.identity.federation.bindings.tomcat.sp

Examples of org.picketlink.identity.federation.bindings.tomcat.sp.SPRedirectFormAuthenticator


    public void testSAML2Redirect() throws Exception {
        System.setProperty("picketlink.schema.validate", "true");
        MockCatalinaContextClassLoader mclSPEmp = setupTCL(profile + "/sp/employee");
        Thread.currentThread().setContextClassLoader(mclSPEmp);

        SPRedirectFormAuthenticator sp = new SPRedirectFormAuthenticator();

        MockCatalinaContext context = new MockCatalinaContext();
        MockCatalinaRequest request = new MockCatalinaRequest();

        request.setParameter(GeneralConstants.RELAY_STATE, null);

        MockCatalinaResponse response = new MockCatalinaResponse();
        MockCatalinaLoginConfig loginConfig = new MockCatalinaLoginConfig();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        response.setWriter(new PrintWriter(baos));

        MockCatalinaSession session = new MockCatalinaSession();

        sp.setContainer(context);
        sp.testStart();

        sp.authenticate(request, response, loginConfig);

        String redirectStr = response.redirectString;
        assertNotNull("Redirect String is null?", redirectStr);
        String saml = redirectStr.substring(redirectStr.indexOf(SAML_REQUEST_KEY) + SAML_REQUEST_KEY.length());

        // Now send it to IDP
        MockCatalinaRealm realm = new MockCatalinaRealm("anil", "test", new Principal() {
            public String getName() {
                return "anil";
            }
        });

        List<String> roles = new ArrayList<String>();
        roles.add("manager");
        roles.add("employee");

        MockCatalinaContextClassLoader mclIDP = setupTCL(profile + "/idp/");
        Thread.currentThread().setContextClassLoader(mclIDP);

        request = new MockCatalinaRequest();
        request.setRemoteAddr(employee);
        request.setSession(session);
        request.setParameter("SAMLRequest", RedirectBindingUtil.urlDecode(saml));
        request.setUserPrincipal(new GenericPrincipal(realm, "anil", "test", roles));
        request.setMethod("GET");

        response = new MockCatalinaResponse();
        response.setWriter(new PrintWriter(baos));

        IDPWebBrowserSSOValve idp = new IDPWebBrowserSSOValve();

        idp.setSignOutgoingMessages(false);
        idp.setIgnoreIncomingSignatures(true);
        idp.setStrictPostBinding(false);

        idp.setContainer(context);
        idp.start();
        idp.invoke(request, response);

        redirectStr = response.redirectString;
        assertNotNull(redirectStr);
        String samlResponse = RedirectBindingUtil.urlDecode(redirectStr.substring(redirectStr.indexOf(SAML_RESPONSE_KEY)
                + SAML_RESPONSE_KEY.length()));

        mclSPEmp = setupTCL(profile + "/sp/employee");
        Thread.currentThread().setContextClassLoader(mclSPEmp);

        sp = new SPRedirectFormAuthenticator();
        context = new MockCatalinaContext();

        context.setRealm(realm);
        request = new MockCatalinaRequest();
        request.setContext(context);

        request.setMethod("GET");
        request.setParameter("SAMLResponse", samlResponse);
        request.setParameter("RelayState", null);
        request.setSession(session);

        response = new MockCatalinaResponse();
        loginConfig = new MockCatalinaLoginConfig();

        sp.setContainer(context);
        sp.testStart();
        sp.getConfiguration().setIdpUsesPostBinding(false);

        assertTrue("Employee app auth success", sp.authenticate(request, response, loginConfig));
    }
View Full Code Here


        System.setProperty("picketlink.schema.validate", "true");
        MockCatalinaSession session = new MockCatalinaSession();
        // First we go to the employee application
        MockCatalinaContextClassLoader mclSPEmp = setupTCL(profile + "/responses");
        Thread.currentThread().setContextClassLoader(mclSPEmp);
        SPRedirectFormAuthenticator spEmpl = new SPRedirectFormAuthenticator();

        MockCatalinaContext context = new MockCatalinaContext();
        spEmpl.setContainer(context);
        spEmpl.testStart();
        spEmpl.getConfiguration().setIdpUsesPostBinding(false);

        MockCatalinaRequest catalinaRequest = new MockCatalinaRequest();
        catalinaRequest.setSession(session);
        catalinaRequest.setContext(context);
        catalinaRequest.setMethod("GET");

        byte[] samlResponse = readIDPResponse();

        String idpResponse = RedirectBindingUtil.deflateBase64Encode(samlResponse);

        catalinaRequest.setParameter(GeneralConstants.SAML_RESPONSE_KEY, idpResponse);

        MockCatalinaResponse catalinaResponse = new MockCatalinaResponse();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        catalinaResponse.setWriter(new PrintWriter(baos));

        LoginConfig loginConfig = new LoginConfig();
        assertTrue(spEmpl.authenticate(catalinaRequest, catalinaResponse, loginConfig));

        Map<String, List<Object>> sessionMap = (Map<String, List<Object>>) session
                .getAttribute(GeneralConstants.SESSION_ATTRIBUTE_MAP);
        assertNotNull(sessionMap);
        assertEquals("sales", sessionMap.get("Role").get(0));
View Full Code Here

        // Let us feed the LogOutRequest to the SPFilter
        MockCatalinaContextClassLoader mclSPEmp = setupTCL(profile + "/sp/employee");
        Thread.currentThread().setContextClassLoader(mclSPEmp);

        SPRedirectFormAuthenticator sp = new SPRedirectFormAuthenticator();
        sp.setContainer(context);
        sp.testStart();
        sp.getConfiguration().setIdpUsesPostBinding(false);

        MockCatalinaRequest catalinaRequest = new MockCatalinaRequest();
        catalinaRequest.setSession(new MockCatalinaSession());
        catalinaRequest.setUserPrincipal(principal);
        MockCatalinaResponse response = new MockCatalinaResponse();
        MockCatalinaLoginConfig loginConfig = new MockCatalinaLoginConfig();

        ByteArrayOutputStream filterbaos = new ByteArrayOutputStream();
        response.setWriter(new PrintWriter(filterbaos));
        catalinaRequest.setParameter(GeneralConstants.GLOBAL_LOGOUT, "true");
        sp.authenticate(catalinaRequest, response, loginConfig);

        String redirectStr = response.redirectString;
        String logoutRequest = redirectStr.substring(redirectStr.indexOf(SAML_REQUEST_KEY) + SAML_REQUEST_KEY.length());

        InputStream stream = RedirectBindingUtil.urlBase64DeflateDecode(logoutRequest);
View Full Code Here

        MockCatalinaContext context = new MockCatalinaContext();
        context.setRealm(realm);
        session.setServletContext(context);

        SPRedirectFormAuthenticator sp = new SPRedirectFormAuthenticator();
        sp.setContainer(context);
        sp.testStart();
        sp.getConfiguration().setIdpUsesPostBinding(false);

        request = new MockCatalinaRequest();
        request.setSession(session);
        request.setMethod("GET");
        request.setParameter("SAMLRequest", RedirectBindingUtil.urlDecode(logoutRequest));
        request.setParameter("RelayState", relayState);

        MockCatalinaResponse filterResponse = new MockCatalinaResponse();
        ByteArrayOutputStream filterbaos = new ByteArrayOutputStream();
        filterResponse.setWriter(new PrintWriter(filterbaos));

        sp.authenticate(request, response, new LoginConfig());

        redirectStr = response.redirectString;

        destination = redirectStr.substring(0, redirectStr.indexOf(SAML_RESPONSE_KEY) - 1);
        relayState = redirectStr.substring(redirectStr.indexOf(RELAY_STATE_KEY) + RELAY_STATE_KEY.length());
        assertNotNull("RelayState exists", relayState);
        String logoutResponse = redirectStr.substring(redirectStr.indexOf(SAML_RESPONSE_KEY) + SAML_RESPONSE_KEY.length(),
                redirectStr.indexOf(RELAY_STATE_KEY) - 1);

        stream = RedirectBindingUtil.urlBase64DeflateDecode(logoutResponse);
        StatusResponseType statusResponse = (StatusResponseType) saml2Request.getSAML2ObjectFromStream(stream);
        assertEquals("Match IDP URL", IDP, destination);

        // Now the SP (employee app) has logged out and sending a status response to IDP
        Thread.currentThread().setContextClassLoader(mclIDP);

        session.clear();
        request.clear();

        request.setMethod("GET");
        request.setSession(session);
        request.setUserPrincipal(genericPrincipal);
        request.setParameter("SAMLResponse", RedirectBindingUtil.urlDecode(logoutResponse));
        request.setParameter("RelayState", relayState);

        baos = new ByteArrayOutputStream();
        response.setOutputStream(baos);
        response.setWriter(new PrintWriter(baos));
        idp.invoke(request, response);

        destination = redirectStr.substring(0, redirectStr.indexOf(SAML_RESPONSE_KEY) - 1);
        relayState = redirectStr.substring(redirectStr.indexOf(RELAY_STATE_KEY) + RELAY_STATE_KEY.length());
        logoutResponse = redirectStr.substring(redirectStr.indexOf(SAML_RESPONSE_KEY) + SAML_RESPONSE_KEY.length(),
                redirectStr.indexOf(RELAY_STATE_KEY) - 1);

        stream = RedirectBindingUtil.urlBase64DeflateDecode(logoutResponse);

        SAML2Response saml2Response = new SAML2Response();
        statusResponse = (StatusResponseType) saml2Request.getSAML2ObjectFromStream(stream);
        assertEquals("Match IDP URL", IDP, destination);

        // Now we should have got a full success report from IDP
        MockCatalinaContextClassLoader mclSPSales = setupTCL(profile + "/sp/employee");
        Thread.currentThread().setContextClassLoader(mclSPSales);
        sp = new SPRedirectFormAuthenticator();
        sp.setContainer(context);
        sp.testStart();

        session.clear();
        request.clear();
        request.setSession(session);
        request.setUserPrincipal(genericPrincipal);
        request.setParameter("SAMLResponse", RedirectBindingUtil.urlDecode(logoutResponse));
        request.setParameter("RelayState", relayState);
        request.setContext(context);

        //IDP should now send the final logout response to Sales application who sent the original request
        sp.authenticate(request, response, new LoginConfig());

        //Ensure that at the IDP we do not have any participants in the session (both employee and sales are logged out)
        IdentityParticipantStack stack = server.stack();
        assertEquals(0, stack.getParticipants(session.getId()));
        assertEquals(0, stack.getNumOfParticipantsInTransit(session.getId()));
View Full Code Here

TOP

Related Classes of org.picketlink.identity.federation.bindings.tomcat.sp.SPRedirectFormAuthenticator

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.