Как использовать process-engine-plugin для включения единого входа в камунде - PullRequest
0 голосов
/ 18 июня 2019

Я хочу интегрировать SSO в моем веб-приложении camunda, которое работает на Apache Tomcat. Я включил LDAP с помощью плагина Ldap вместе с плагином авторизации администратора с этим гидом . Теперь, чтобы включить SSO, я следовал за saml-клиентом, предоставленным этим git repo . Но я не знаю, где разместить saml-client в моем приложении camunda. Должен ли я реализовать Filter и поместить кусочки в doFilter ()? Как это:

package my.domain.com.camunda.auth;

import static org.camunda.bpm.engine.authorization.Permissions.ACCESS;
import static org.camunda.bpm.engine.authorization.Resources.APPLICATION;

import java.io.IOException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.camunda.bpm.cockpit.Cockpit;
import org.camunda.bpm.engine.AuthorizationService;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.identity.Group;
import org.camunda.bpm.engine.rest.spi.ProcessEngineProvider;
import org.camunda.bpm.webapp.impl.security.SecurityActions;
import org.camunda.bpm.webapp.impl.security.SecurityActions.SecurityAction;
import org.camunda.bpm.webapp.impl.security.auth.Authentication;
import org.camunda.bpm.webapp.impl.security.auth.Authentications;
import org.camunda.bpm.webapp.impl.security.auth.UserAuthentication;

import com.coveo.saml.SamlClient;
import com.coveo.saml.SamlResponse;

/**
 * This security filter maps the user to the camunda user and group management
 *
 */
public class AuthenticationFilter implements Filter {

    private static final String[] APPS = new String[] { "cockpit", "tasklist" };
    private static final String APP_MARK = "/app/";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletReq, ServletResponse servletRes, FilterChain chain)
            throws IOException, ServletException {
        final HttpServletRequest servletRequest = (HttpServletRequest) servletReq;
        final HttpServletResponse servletResponse = (HttpServletResponse) servletRes;

        SamlClient client = SamlClient.fromMetadata("MyRelyingPartyIdentifier",
                "http://some/url/that/processes/assertions", "<your.IDP.metadata.xml>");
        String encodedRequest = client.getSamlRequest();
        String idpUrl = client.getIdentityProviderUrl();
        // redirect to the identity provider, passing the encoded request with the
        // SAMLRequest form parameter.

//      String encodedResponse = servletRequest.getParameter("SAMLResponse");
//      SamlResponse response = client.decodeAndValidateSamlResponse(encodedResponse);
//      String authenticatedUser = response.getNameID();

        // To initiate the authentication exchange
        client.redirectToIdentityProvider(servletResponse, "");
        // To process the POST containing the SAML response
        SamlResponse response = client.processPostFromIdentityProvider(servletRequest);
    }

    @Override
    public void destroy() {

    }
}

Я запутался, так как это была моя первая реализация единого входа. Может ли кто-нибудь наставить меня в этом.

...