How to configure My Web Application as SAML Test Connector (SP) using Onelogin?

大城市里の小女人 提交于 2019-12-25 08:03:35

问题


I have added my web application into onelogin using SAML Test Connector. In Configuration tab I have given the following values

Recipient : http://localhost:8080/em/live/pages/samlAuth/

ACS(Consumer) URL Validator* : ^

ACS (Consumer) URL* :http://localhost:8080/ws_em/rest/accounts/consume-saml

Login URL : http://localhost:8080/ws_em/rest/accounts/produce-saml

Where http://localhost:8080/ws_em/rest/accounts/produce-saml creates an SAML Request by taking IssuerUrl, SAML EndPoint Copied From Onelogin SSO Tab and ACS url as http://localhost:8080/ws_em/rest/accounts/consume-saml.

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/produce-saml")
    public com.virima.em.core.Response SAMLAuthentication(){
         com.Response resp = new com.Response();
         AppSettings appSettings = new AppSettings();
         appSettings.setAssertionConsumerServiceUrl(ACSUrl);
         appSettings.setIssuer(IssuerUrl));
         AccountSettings accSettings = new AccountSettings();
         accSettings.setIdpSsoTargetUrl(IdpSsoTargetUrl);
         AuthRequest authReq = new AuthRequest(appSettings,accSettings);
         Map<String, String[]> parameters = request.getParameterMap();
         String relayState = null;
         for(String parameter : parameters.keySet()) {
           if(parameter.equalsIgnoreCase("relaystate")) {
             String[] values = parameters.get(parameter);
             relayState = values[0];
           }
        }
        String reqString = authReq.getSSOurl(relayState);
        response.sendRedirect(reqString);
        resp.setResponse(reqString);
        return resp;
 }

http://localhost:8080/ws_em/rest/accounts/consume-saml calls is supposed to take my SAML request and do the authentication . Here I am using the certificate generated in Onelogin SSO Tab

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/consume-saml")
    public com.onelogin.saml.Response SAMLAuthenticationResponse(){
        com.onelogin.saml.Response samlResponse = null;
        String certificateS ="c"; //Certificate downloaded from Onelogin SSO Tab
        AccountSettings accountSettings = new AccountSettings();
        accountSettings.setCertificate(certificateS);
        samlResponse = new com.onelogin.saml.Response(accountSettings,request.getParameter("SAMLResponse"),request.getRequestURL().toString());
       if (samlResponse.isValid()) {
           // the signature of the SAML Response is valid. The source is trusted
            java.io.PrintWriter writer = response.getWriter();
            writer.write("OK!");
            String nameId = samlResponse.getNameId();
            writer.write(nameId);
            writer.flush();
      } else {
         // the signature of the SAML Response is not valid
        java.io.PrintWriter writer = response.getWriter();
        writer.write("Failed\n");
        writer.write(samlResponse.getError());
        writer.flush();
      }
            return samlResponse;
}

I am getting this error

Federation Exception: Malformed URL. Please contact your administrator.

It doesn't seem to come inside the ACS url I have inside my app.

Is there any mistakes in my configuration ? Or is there a better way to do this ?


回答1:


ACS is Assertion Consumer Service, is the endpoint that process at the SP the SAMLResponse sent by the Identity Provider, so the http://localhost:8080/ws_em/rest/accounts/consume-saml process and validate the SAMLResponse.

Do you have verbose trace error? Malformed URL must be that the code is trying to build a URL var with a non URL string.

BTW, You are using the java-saml toolkit, but the 1.0 version instead the recommended 2.0.

I highly recommend you to use the 2.0 and before work on your integration, try to run the app example



来源:https://stackoverflow.com/questions/40150754/how-to-configure-my-web-application-as-saml-test-connector-sp-using-onelogin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!