Child pages
  • Problemas de performance na consulta da base LDAP
Skip to end of metadata
Go to start of metadata

A melhoria abaixo pode resolver o problema com a demora na leitura de uma base muito grande e impedir o erro de timeout para o Shibboleth, no retorno dos atributos consultados.

Esta solução técnica é para melhorar a resposta do tempo de retorno dos atributos de uma determinada classe utilizada, no caso   (objectClass=brEduPerson).

Atenção !

Muito importante que antes de alterar qualquer valor de entrada neste arquivo, seja realizado um backup do mesmo. Segue uma orientação de comopode ser feito esse backup:

cp -a /opt/shibboleth-idp/conf/attribute-resolver.xml /home/cafe/backup

Guia passo a passo

No arquivo /opt/shibboleth-idp/conf/attribute-resolver.xml alterar a seguinte linha:

Procure pela secção DEFINICAO DE DATACONNECTORES

        <!-- ========================================== -->
        <!-- DEFINICAO DE DATACONNECTORS                -->
        <!-- ========================================== -->

        <resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"
                ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
                baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
                principal="%{idp.attribute.resolver.LDAP.bindDN}"
                principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
                useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}">
                <dc:FilterTemplate>
                        <![CDATA[
                                %{idp.attribute.resolver.LDAP.searchFilter}
                        ]]>
                </dc:FilterTemplate>
                <dc:ReturnAttributes>%{idp.authn.LDAP.returnAttributes} cn sn mail eduPersonPrincipalName schacDateOfBirth brPersonCPF displayName givenName uid</dc:ReturnAttributes>
                <dc:LDAPProperty name="java.naming.ldap.attributes.binary" value="uid"/>
        </resolver:DataConnector>

        <resolver:DataConnector id="ldapBrEduPerson" xsi:type="dc:LDAPDirectory"
                ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
                baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
                principal="%{idp.attribute.resolver.LDAP.bindDN}"
                principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
                maxResultSize="10"
                useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}">
                <dc:FilterTemplate>
                        <!--    <![CDATA[
                        (&(&(%{idp.authn.LDAP.returnAttributes}:dn:=$requestContext.principalName)(brEduAffiliation=*))(&(brEntranceDate=*)(!(brExitDate=*))))
                        ]]> -->
                        <![CDATA[
                        (objectClass=brEduPerson)
                        ]]>
                </dc:FilterTemplate>
                <dc:ReturnAttributes>brEduAffiliationType</dc:ReturnAttributes>
        </resolver:DataConnector>


Nesse secção haverá duas regras de DATA CONNECTORES, a regra que iremos alterar será a regra referente ao "ldapBrEduPerson"

Alterar da seguinte forma:

Antes →

        <resolver:DataConnector id="ldapBrEduPerson" xsi:type="dc:LDAPDirectory"
                ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
                baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
                principal="%{idp.attribute.resolver.LDAP.bindDN}"
                principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
                maxResultSize="10"
                useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}">
                <dc:FilterTemplate>
                   <![CDATA[(&(&(%{idp.authn.LDAP.returnAttributes}:dn:=$requestContext.principalName)(brEduAffiliation=*))(&(brEntranceDate=*)(!(brExitDate=*))))]]> -->
                </dc:FilterTemplate>
                <dc:ReturnAttributes>brEduAffiliationType</dc:ReturnAttributes>
        </resolver:DataConnector>


Depois →

  1. Será feito o seguinte, iremos comentar a atual regra que está ativa dentro da tag <dc:FilterTemplate>
  2. Para comentar usaremos as tags do XML <!-- e -->
  3. Após isso iremos adicionar uma nova regra de filtro logo abaixo
  4. nova regra a ser adicionada <![CDATA[(objectClass=brEduPerson)]]>
       <resolver:DataConnector id="ldapBrEduPerson" xsi:type="dc:LDAPDirectory"
                ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
                baseDN="%{idp.attribute.resolver.LDAP.baseDN}"
                principal="%{idp.attribute.resolver.LDAP.bindDN}"
                principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
                maxResultSize="10"
                useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}">
                <dc:FilterTemplate>
                        <!--  <![CDATA[(&(&(%{idp.authn.LDAP.returnAttributes}:dn:=$requestContext.principalName)(brEduAffiliation=*))(&(brEntranceDate=*)(!(brExitDate=*))))]]>  -->
                        <![CDATA[(objectClass=brEduPerson)]]>
                </dc:FilterTemplate>
                <dc:ReturnAttributes>brEduAffiliationType</dc:ReturnAttributes>
        </resolver:DataConnector>



Salve o arquivo com o comando do seu editor, reinicie o serviço do tomcat usando o seguinte comando:

systemctl restart tomcat8.service

Pronto, agora e testar os acessos pelo IdP e monitorar se o tempo de resposta do LDAP melhorou.

Artigos relacionados