Apache OpenID · 10 min read · Dec 27, 2025
Instalar e Configurar o Módulo Apache para Autenticação OpenID
Módulo Apache para Autenticação OpenID
OpenID é uma tecnologia amplamente adotada para autenticação de usuários em aplicações web. Ela se baseia nos conceitos de autenticação de usuários distribuídos em aplicações de blog. Este pequeno livro de receitas explica passo a passo como instalar e configurar o módulo Apache de código aberto mod_auth_oid.
O objetivo pretendido deste módulo é fornecer uma implementação simples de relying party que pode ser usada para proteger o acesso a aplicações e recursos baseados em Apache. O módulo não implementa todas as funções descritas na Especificação oficial. No entanto, suas funcionalidades já são maduras o suficiente para proporcionar uma usabilidade confortável de login para suas aplicações e usuários.
Há também dois módulos adicionais incluídos que aprimoram o módulo de autenticação com a capacidade de mapear IDs de usuário para usuários locais, não apenas via configuração do Apache, mas com um arquivo de mapeamento local (que pode já existir de outras aplicações) ou via Ldap.
Aviso de Segurança: O módulo não suporta Extensões de Protocolo como PAPE. Portanto, o uso em ambientes com requisitos mais altos de proteção de dados, como saúde ou transações monetárias, não é recomendado.
Instalação
Pré-requisitos
Para instalar este módulo Apache, os seguintes requisitos devem ser atendidos:
- Apache 2.2 incluindo mod_ssl, mod_proxy, mod_include, arquivos de cabeçalho e apxs/apxs2 (frequentemente referidos como pacotes apache2 e apache2-devel).
- Módulo Apache mod_parp para análise de parâmetros. Obtenha-o aqui. A instalação é simples: use sudo ou faça login como root:
$ tar xvBzf mod_parp-0.10-src.tar.gz $ cd mod_parp-0.10 $ sudo apxs2 -i -c apache2/mod_parp.c $ sudo chmod 755 /usr/lib64/apache2/mod_parp.so
Módulo Principal
Baixe e descompacte o código-fonte daqui.
$ tar xvBzf mod_auth_oid-2.0-src.tar.gz
$ cd mod_auth_oid-2.0
$ sudo apxs2 -i -c -I . -D AOID_MOD_EXT_HOOKS apache2/mod_auth_oid.c -lcrypto -lparp*Opcional: Existem módulos adicionais que vêm com o código-fonte. Se você também quiser usar o módulo adicional altamente recomendado mod_auth_oid_file.c ou o mod_auth_oid_ldap.c, compile e instale-os também com um dos seguintes comandos.*
$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_file.c
$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_ldap.cConfiguração
Seção do Servidor
Os seguintes módulos padrão do Apache são necessários:
- mod_ssl (fornece rotinas de criptografia usadas pelo mod_auth_oid)
- mod_proxy (fornece funções para o mod_auth_oid a fim de enviar solicitações para os Provedores OpenID)
- mod_include (fornece renderização de páginas shtml)
Ative os módulos na seção de configuração global do seu Apache. Ajuste a localização do arquivo de acordo com o layout do seu sistema de arquivos. Também é importante que os módulos sejam carregados após o mod_ssl. Portanto, coloque estas linhas no final do bloco LoadModule do seu Apache. Descomente as duas últimas linhas com os módulos de mapeamento se você pretende usá-los também. Se sua distribuição tiver um estilo individual para carregar módulos, faça isso de acordo com suas instruções (por exemplo, coloque as seguintes linhas em um arquivo que seja incluído automaticamente se estiver em um diretório específico como modules-enabled ou similar.
LoadModule parp_module /usr/lib64/apache2/mod_parp.so
LoadModule auth_oid_module /usr/lib64/apache2/mod_auth_oid.so
# LoadModule auth_oid_file_module /usr/lib64/apache2/mod_auth_oid_file.so
# LoadModule auth_oid_ldap_module /usr/lib64/apache2/mod_auth_oid_ldap.soTente reiniciar seu servidor. Se o módulo for carregado corretamente, ele deve ser relatado no error.log do Servidor:
[Sun Nov 06 12:10:59 2011] [notice] Apache/2.2.17 (Linux/SUSE) mod_ssl/2.2.17 OpenSSL/1.0.0c mod_auth_oid/2.0 configurado -- retomando operações normaisSeção VirtualHost
Agora é hora de preparar a configuração específica para proteger sua aplicação. Edite a configuração do seu VirtualHost. Claro, deve ser seu VirtualHost https, pois estamos lidando com segurança aqui. E substitua meu OpenID YOURNAME pelo seu próprio OpenID, caso contrário, YOURNAME pode roubar suas joias da coroa um dia. ;) Se você quiser usar o Google como seu provedor OpenID, você terá que seguir um caminho ligeiramente diferente e adicionar um AOID_UserPattern, porque o Google usa a abordagem de Identidade Direcionada com OpenIDs opacos por site. No último capítulo deste howto, chamado Narrowing the namespace of your preferred OpenID providers, a diretiva de configuração é explicada com um exemplo do Google.
Assumimos que o recurso que queremos proteger é a localização /private e o manipulador de autenticação está localizado em /aoid. As seções abaixo estão comentadas para indicar o que você deve fazer.
# Uma referência completa de todas as opções de configuração disponíveis
# está disponível em: http://auth-openid.sourceforge.net/
# Cuidado: Ative em CAs confiáveis colocando-as em cacerts
# Vincule-as a hashnames como descrito na documentação do Apache
# http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslproxycacertificatepath
SSLProxyEngine on
SSLProxyCACertificatePath /etc/ssl/cacerts
# use a flag httponly prevenindo ataques XSS ao cookie de sessão
BrowserMatch "Mozilla.*Firefox/(3|4)" HttpOnlyCookie
BrowserMatch "MSIE [6789]" HttpOnlyCookie
BrowserMatch "Opera/(10|9\.[56789])" HttpOnlyCookie
BrowserMatch Secure SecureCookie
# configurações básicas do mod_auth_oid
AOID_Realm /
AOID_StartPage /private/index.html
AOID_LogLevel info
AOID_LoginPath /aoid/login
AOID_LoginSuffix .shtml
AOID_Timeout 300
AOID_CookieName AJESSIONID
# Mapeamento de Usuário OpenID. Possibilidades adicionais são descritas
# no Capítulo "Mapeamento de arquivo local" da página Howtoforge
# usuários permitidos/conhecidos SUBSTITUA PELO SEU OPENID
AOID_User http://YOURNAME.myopenid.com/ YOURNAME
# Impor autenticação de usuário mod_auth_oid da seguinte localização
AuthType OpenID
Require valid-user
# página de login do mod_auth_oid
# habilitar SSI para a página de login (requer mod_include)
Options Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Arquivos
Agora crie um diretório chamado private no DocumentRoot do seu VirtualHost, que inclui o conteúdo que você deseja proteger. Como exemplo, adicione um arquivo index.html que diz: “Yeahh!! mod_auth_oid rocks e eu hackeei 127.0.0.1!.
Além disso, você precisa de uma página de login no diretório aoid que também está no DocumentRoot. Como ponto de partida, você pode usar a página SHTML de exemplo do diretório htdocs no tarball. Basta copiá-la também para o seu htdocs. Verifique as permissões dos arquivos recém-criados, se correspondem às preferências do seu servidor web.
Agora você pode reiniciar seu Apache mais uma vez. Por favor, verifique o error.log para ver se tudo está bem.
Teste Sua Instalação
Agora abra seu navegador. Se você fez tudo certo e seu Apache também, então você deve ver uma página de login quando apontar seu navegador para a seguinte URL: https://YOURHOST/private/index.html
Selecione seu provedor e envie. O módulo irá redirecioná-lo para seu provedor onde você faz login, e se for bem-sucedido, você será enviado de volta para sua aplicação privada. Se você escolher o Google, basta enviar o Identificador OP proposto, nos outros dois casos insira seu OpenID na parte destacada. Mais adiante no howto há uma solução muito mais conveniente para uma página de login com aparência elegante descrita.
Depuração Caso Algo Dê Errado
No improvável caso de algo não funcionar como esperado, você tem várias indicações do que pode estar errado no error.log do seu servidor Apache. As mensagens de log devem indicar o que falhou. Uma lista detalhada dos possíveis códigos de erro e como habilitar um nível de log mais alto pode ser encontrada na página do mod_auth_oid.
Opções Adicionais
Página de Login Elegante
Eu assumo que você é como eu, e uma das primeiras coisas que você gostaria de ver é uma página de login com uma boa aparência no navegador. Algo assim parece legal o suficiente para o seu gosto.

Esta página de login com aparência profissional foi criada com o Projeto de Código Aberto openid-selector, que é uma maneira amigável de selecionar um OpenID.
Após gerar a página de login, ela deve ser aprimorada com as inclusões shtml do mod_auth_oid. Eu adicionei a parte de renderização de erro da página de login original na página html gerada pelo openid-selector. Meu exemplo da página personalizada pode ser baixado aqui.
Mapeamento de ID de Usuário Local
Se você também compilou o módulo mod_auth_oid_file, então você pode mapear seus registros de ID de usuário em um arquivo local em vez de adicioná-los todos ao seu arquivo de configuração do Apache. As instruções detalhadas podem ser encontradas aqui.
Leia o seguinte capítulo para adicionar auto-registro de usuários com mapeamento de arquivo local em um único passo.
Auto Administração de Usuário Um Mapeamento de OpenID para ID de Usuário Local
Assumindo que você já tem uma administração de usuários em funcionamento que é baseada nos arquivos .htpasswd do Apache, você pode usar o seguinte trecho de configuração para aprimorá-la, para que os usuários possam registrar contas OpenID em suas contas locais. Copie o arquivo file_mapper.html do tarball para o seu htdocs.
# Seção Virtual Host
AOID_File_DB /etc/apache2/mapdb
AOID_File_AdminPage /usr/local/apache2/htdocs/file_mapper.html
# Localização da administração de perfil
# Ajuste o caminho do arquivo de acordo com seu arquivo .htpasswd existente
AuthUserFile /srv/data/.htpasswd
AuthName 'Digite seu Nome de Login: Cancelar para registrar se você não tiver um.'
AuthType Basic
Require valid-user
SetEnvIf Request_Method POST parp
SetEnvIf Request_Method GET parp
SetHandler auth-oid-file
AOID_File_UserOnly on
Agora, o mod_auth_oid_file cria um arquivo mapdb onde armazena a relação entre contas OpenID e contas .htpasswd locais.
Considerações de Segurança
Documento de Descoberta de Relying Party
OpenID recomenda hospedar um Documento de Descoberta de Relying Party que indica um endereço return_to apropriado para o Provedor OpenID. O Yahoo indicará seu site como não confiável, se você não fornecer tal documento. Mais informações podem ser encontradas aqui.
Salve um documento chamado openid.xrd no DocumentRoot do seu site. O conteúdo deve ser semelhante ao seguinte exemplo. Ajuste-o de acordo com sua configuração.
http://specs.openid.net/auth/2.0/return_to
https://YOUR_HOST_HERE/aoid/login
O documento deve ser referenciado enviando um cabeçalho especialmente elaborado com cada resposta HTTP ou pode ser incluído no documento de nível superior do site.
Variante 1 anuncie via cabeçalho (recomendado)
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
# .......
Header set X-XRDS-Location https://YOUR_HOST_HERE/openid.xrdVariante 2 anuncie no cabeçalho do documento html de nível superior
....
....Protegendo Contra Ataques DoS e Outros Tipos de Ataques
Ataques DoS e falsificação de solicitação entre sites são um grande problema hoje. Você pode proteger seu site de forma eficiente contra ataques DoS com outro Módulo de Código Aberto, chamado mod_qos. Este módulo é uma faca suíça quando se trata de proteger seu servidor contra vários tipos de ataques. O módulo pode ser instalado tão facilmente quanto qualquer outro módulo Apache. O seguinte exemplo de configuração mostra uma configuração básica que protege seu site contra ataques DoS e falsificação de solicitação entre sites na página de auto-administração.
# seção do servidor
LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
# lida com conexões de até 100000 IPs diferentes
QS_ClientEntries 100000
# permitirá apenas 50 conexões por IP
QS_SrvMaxConnPerIP 50
# número máximo de conexões TCP ativas é limitado a 256
MaxClients 256
# desabilita keep-alive quando 70% das conexões TCP estão ocupadas:
QS_SrvMaxConnClose 180
# velocidade mínima de requisição/resposta (negar clientes lentos bloqueando o servidor, ou seja, slowloris mantendo conexões abertas sem solicitar nada):
QS_SrvMinDataRate 120 1500 400
# e limite o cabeçalho e corpo da requisição (cuidado, isso limita uploads e requisições post também):
QS_SrvMaxConnClose 70%
LimitRequestFields 30
QS_LimitRequestBody 102400
QS_ClientEventBlockCount 20 300
QS_SetEnvIfStatus 400 QS_Block
QS_SetEnvIfStatus 401 QS_Block
QS_SetEnvIfStatus 403 QS_Block
QS_SetEnvIfStatus 404 QS_Block
QS_SetEnvIfStatus 405 QS_Block
QS_SetEnvIfStatus 406 QS_Block
QS_SetEnvIfStatus 408 QS_Block
QS_SetEnvIfStatus 411 QS_Block
QS_SetEnvIfStatus 413 QS_Block
QS_SetEnvIfStatus 414 QS_Block
QS_SetEnvIfStatus 417 QS_Block
QS_SetEnvIfStatus 500 QS_Block
QS_SetEnvIfStatus 503 QS_Block
QS_SetEnvIfStatus 505 QS_Block
QS_SetEnvIfStatus QS_SrvMinDataRate QS_Block
QS_SetEnvIfStatus NullConnection QS_Block
QS_SrvMaxConnExcludeIP 127.0.0.1
# proteção CSRF do Formulário de Auto Registro definindo
# quatro marcos para administração de perfil
QS_MileStone deny "^GET /OpenIdLogin"
QS_MileStone deny "^GET /OpenIDRegistration"
QS_MileStone deny "^GET /profile"
QS_MileStone deny "^POST /profile"Restringindo o Namespace de Seus Provedores OpenID Preferidos
Você pode limitar quais provedores OpenID você aceita para autenticação do seu site com a diretiva de configuração AOID_UserPattern. Os seguintes dois exemplos lhe dão uma ideia geral de como construir expressões regulares para esse propósito.
# Seção VirtualHost
# Permitir apenas OpenIDs do Google
AOID_UserPattern "^(https://www\.google\.com/accounts/o8/id\?id=.*)$" "$1"
# Permitir apenas OpenIDs do my.company.com e usar apenas uma parte dela para mapeá-la a um usuário local.
AOID_UserPattern "^https://my\.company\.com/([a-z]{1})[a-z]+\.([a-z]{2})[a-z]+$" "$1$2"Palavras Finais
Obrigado por ler este tutorial. Espero que sua instalação tenha sido tranquila. Desejo que muitos usuários se beneficiem deste módulo e espero que tenha sido divertido para você instalá-lo. Se você deseja se manter informado sobre o que está acontecendo com o módulo, pode se inscrever na nossa página do mod_auth_oid no facebook.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.