2016-10-21 3 views
0

Я использую Onelogin 2.0 toolkit. Вместо входа в систему и ACS в качестве файлов jsp я добавил их в качестве служб отдыха. Я получаю эту ошибку, когда мой IdP перенаправляет на ACS Service Url.SAMLResponse null в адресе запроса ACS: используя инструментарий onelogin

SAML ответ не найден, только поддерживается HTTP_POST Binding

В запросе на ACS параметр службы SAMLResponse приходит утратившим. Как я могу это исправить ?

@Path("/saml") 
public class SAMLAuthService { 
    @Context 
    HttpServletRequest request; 

    @Context 
    HttpServletResponse response; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/dologin") 
    public void SAMLLogin(){ 
     try { 
      Auth auth = new Auth(CommonUtils.samlPropertyFileName,request, response); 
      System.out.println("Calling SAML Login::"); 
      auth.login(); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
    } 

    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/acs") 
    public Response SAMLACS() 
      throws ExecException { 
     Response samlResponse = null; 
     try { 
      System.out.println("Calling SAML ACS::"); 
      Auth auth = new Auth(CommonUtils.samlPropertyFileName,request, response); 
      auth.processResponse(); 
      if (!auth.isAuthenticated()) { 
       System.out.println("Not Authenticated"); 
      } 

      List<String> errors = auth.getErrors(); 
      if (!errors.isEmpty()) { 
       if (auth.isDebugActive()) { 
        String errorReason = auth.getLastErrorReason(); 
        if (errorReason != null && !errorReason.isEmpty()) { 
         System.out.println(errorReason); 
        } 
       } 
      } else { 
       Map<String, List<String>> attributes = auth.getAttributes(); 
       String nameId = auth.getNameId(); 
       System.out.println("NameId::"+nameId); 
       if (attributes.isEmpty()) { 
        System.out.println("No Attributes"); 
       } 
       else { 
        Collection<String> keys = attributes.keySet(); 
        for(String name :keys){ 
         List<String> values = attributes.get(name); 
         System.out.println(name+"::"); 
         for(String value :values) { 
          System.out.print(value); 
         } 

        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return samlResponse; 
    } 

} 

ответ

1

Auth конструктор, который вы используете ожидает объект запроса HttpServletRequest с параметром SAMLResponse POST

Если вы не имеете, что HttpServletRequest объект, вы можете создать его, используя makeHttpRequest

You может использовать SAML Tracer для анализа потока SAML между IdP и SP. Вы можете быть уверены, что IdP отправляет SAMLResponse. Я не знаком с используемым вами подходом «Отдых», но вы можете увидеть способ получить SAMLResponse и построить объект HttpServletRequest, впрыскивающий этот параметр.

+0

SAML Tracer говорит 204 Нет содержимого Ошибка. Я проверил заголовки запросов как для запроса jsp, так и для запроса на отдых. размер заголовка и только URL-адрес различаются – Jerry

+0

Когда вы выполняете поток SAML. Вы видите AuthNRequest, отправленный java-saml в IdP? Почему вам нужно следовать «Заходу на отдых» вместо клонирования того, что работает с приведенными примерами? – smartin

+0

Я не знаком с jsp: | , AuthNRequest отправляется успешно. В любом случае, теперь я делаю это с помощью jsp. – Jerry

Смежные вопросы