Как настроить мое веб-приложение в качестве тестового коннектора (SP) SAML с помощью Onelogin?

Я добавил свое веб-приложение в onelogin, используя Тестовый коннектор SAML. На вкладке «Конфигурация» я указал следующие значения

Получатель: http://localhost:8080/em/live/pages/samlAuth/

ACS (потребительский) URL Validator *: ^

ACS (потребительский) URL *: http://localhost:8080/ws_em/rest/accounts/consume-saml

URL для входа: http: // localhost: 8080 / ws_em / rest / accounts / produce-saml < / а>

Где http://localhost:8080/ws_em/rest/accounts/produce-saml создает запрос SAML, принимая IssuerUrl, конечную точку SAML, скопированную из вкладки SSO Onelogin, и URL-адрес ACS как 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 должен принять мой запрос SAML и выполнить аутентификацию. Здесь я использую сертификат, созданный на вкладке Onelogin SSO.

    @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;
}

Я получаю эту ошибку

Исключение федерации: неверный URL-адрес. Обратитесь к своему администратору.

Кажется, он не входит в URL-адрес ACS, который у меня есть в моем приложении.

Есть ли ошибки в моей конфигурации? Или есть способ лучше?


person Jerry    schedule 20.10.2016    source источник


Ответы (1)


ACS - это служба потребителей утверждений, это конечная точка, которая обрабатывает в SP ответ SAML, отправленный поставщиком удостоверений, поэтому http://localhost:8080/ws_em/rest/accounts/consumer-saml и проверьте ответ SAML.

У вас есть подробные ошибки трассировки? Неправильный URL-адрес должен заключаться в том, что код пытается создать переменную URL-адреса с не строкой URL-адреса.

Кстати, вы используете java-saml toolkit, но вместо рекомендуемой версии 1.0 2.0.

Я настоятельно рекомендую вам использовать версию 2.0, и перед тем, как приступить к интеграции, попробуйте запустить пример приложения

person smartin    schedule 20.10.2016
comment
Большое вам спасибо, я обновился до V2.0, и все заработало. Я был полностью сбит с толку при использовании 1.0, теперь ясно спасибо :) - person Jerry; 21.10.2016
comment
Еще одно сомнение, которое у меня есть, код внутри каждого из файлов jsp, которые я сделал как отдельные вызовы отдыха, но какой из них должен быть службой получения, а какой - опубликовать? - person Jerry; 21.10.2016
comment
dologin я даю как запрос GET и acs как POST Я получаю эту ошибку Ответ SAML не найден, поддерживается только привязка HTTP_POST - person Jerry; 21.10.2016
comment
Наборы инструментов java-saml принимают SAMLResponse только при привязке HTTP-POST (ACS ожидает параметр SAMLResponse внутри параметра POST), а остальные отправленные или полученные сообщения SAML используют привязку HTTP-Redirect. - person smartin; 21.10.2016
comment
Позвольте мне ответить вам на созданный вами новый вопрос: stackoverflow.com/questions/40175122/ - person smartin; 21.10.2016