Grupo de Autenticação Apache / LDAP com base na URL

2

Estou trabalhando na autenticação LDAP para o Apache2 HTTPD, e queria saber se é possível fazer com que o Apache se autentique no LDAP com base em grupos, mas também dependendo da URL que é fornecida. Por exemplo, se um usuário solicitar o seguinte:

link nome do grupo > /

O Apache solicita credenciais e verifica um serviço de diretório LDAP (OpenLDAP) para garantir que o usuário pertença ao "< nome do grupo >" grupo. Em essência, o usuário deve ser capaz de solicitar qualquer recurso arbitrário, e o Apache deve ser capaz de pegar o URL, extrair o recurso específico que está sendo solicitado e garantir que o usuário pertença a um grupo com o mesmo nome.

Não encontrei nenhuma informação relevante sobre a extração de informações de uma solicitação de URL e o processamento dentro dos arquivos de configuração do Apache. Alguém já fez algo parecido com isso?

    
por ossys 07.05.2012 / 00:20

2 respostas

1

Embora eu não tenha feito exatamente o que você está perguntando, tenho certeza de que é possível. No meu trabalho, usamos LDAP authn / authz em um servidor ActiveDirectory.

Você configura o Apache para autenticar no LDAP, configurando uma tag Location com as várias diretivas do AuthLDAP. Um exemplo simples usando sAMAccountName no AD:

<Location /secured>
   AuthType Basic
   AuthzLDAPAuthoritative on
   AuthUserFile /dev/null
   AuthName "Authorization required"
   AuthBasicProvider ldap
   AuthLDAPURL "ldap://ldap.example.com/ou=MyOrg,dc=myDC,dc=myDC?sAMAccountName?sub?(objectClass=*)"
   AuthLDAPBindDN "ldapQueryUser"
   AuthLDAPBindPassword "ldapQueryPassword"
   require valid-user
</Location>

Parece que você deve conseguir configurar locais para cada um dos grupos <a group name> , cada um usando uma consulta LDAP diferente:

<Location /group_A>
    AuthSetups blah blahblah
    AuthLDAPURL "ldap://ldap.example.com/ou=MyOrg,dc=group_A?..."
</Location>

<Location /group_B>
    AuthSetups blah blahblah
    AuthLDAPURL "ldap://ldap.example.com/ou=MyOrg,dc=group_A?..."
</Location>

Ao trabalhar com o Apache e o LDAP, descobri que era melhor trabalhar com a consulta que retornaria os usuários corretamente antes de tentar integrá-los ao Apache. Meus erros acabaram sendo quase sempre erros LDAP, então obter a consulta correta facilitou a parte do apache authn / z.

    
por 01.08.2012 / 23:16
0

Você pode usar os Hosts virtuais para essa correspondência com o Locations, seja via Location ou LocationMatch.

Este é um exemplo que foi atualizado para o Apache 2.4 e é executado em um servidor do Windows 2012 que consulta o ActiveDirectory (foco na seção LocationMatch):

<VirtualHost *:80>
 WSGIScriptAlias /bloodhound C:/apache/bloodhound/installer/bloodhound/site/cgi-bin/trac.wsgi
<Directory C:/apache/bloodhound/installer/bloodhound/site/cgi-bin>
      WSGIApplicationGroup %{GLOBAL}
      Require all granted
      <Files trac.wsgi>
        Require all granted
    </Files>
 </Directory>
 LogLevel debug
 <LocationMatch "/bloodhound/([^/]+/)?login">
      AuthLDAPURL "ldap://<HOST_NAME>:3268/<SEARCH_BASE>?sAMAccountName?sub?(objectClass=user)"
      AuthLDAPBindDN "<BIND_DN>"
      AuthLDAPBindPassword "<PASSWORD>"
      LDAPReferrals Off

      AuthType Basic
      AuthName "Bloodhound - Please Provide Your Credentials"
      AuthBasicProvider ldap
      #If you want to use an LDAP Filter, 
      #uncomment the following and use instead of the ldap-group and subsequent config
      #Require ldap-filter memberof:1.2.840.113556.1.4.1941:=<GROUP_DN>
      Require ldap-group <GROUP_DN>
      AuthLDAPMaxSubGroupDepth 1
      AuthLDAPSubgroupAttribute member
      AuthLDAPSubGroupClass group
      AuthLDAPGroupAttribute member
      AuthLDAPGroupAttributeIsDN on
 </LocationMatch>

A alternativa é seguir o que @khoxsey sugeriu. No entanto, você pode usar o LocationMatch em vez do Location, se melhor atender às suas necessidades.

    
por 19.03.2015 / 20:49