Como funciona a autenticação no MoinMoin
Historicamente, o MoinMoin tem utilizado a autenticação baseada em cookies: acede através do formulário da página PreferênciasDoUtilizador, o moin define uma cookie e a partir daí essa cookie é utilizada para o autenticar - até sair e a cookie ser eliminada (ou até à cookie expirar).
No caso de executar o moin em ambientes empresariais, esta não é uma solução frequente, uma vez que as restrições de acesso são um reforço da fiabilidade. O MoinMoin pode utilizar também uma autenticação baseada em HTTP basic auth, quando for executada em alguns servidores web (como o Apache) que a suportam.
O MoinMoin tem uma autenticação modular que pode ser configurável livremente. Utilize `auth` para definir uma lista de métodos de autenticação que serão processados exactamente por essa ordem.
Quando é utilizada uma base de dados externa de utilizadores, não deve querer recrear todos os utilizadores no moin. Neste caso, a opção de configuração `user_autocreate` foi adicionada. Se a definir como True, será criado um perfil de novo utilizador automaticamente quando um novo utilizador se autenticar (e se o método de autenticação suportar a auto criação).
Actualmente são suportados os seguintes métodos de autenticação:
Configuração do servidor
Autenticação
Método de autenticação no moin
Todas
pelo moin através de cookie própria
pelo moin através de cookie externa
ver contrib/auth_externalcookie/
Apache com CGI, modpy ou Fast``Cgi
pelos módulos Apache: HTTP Basic, HTTP Digest, SSPI (também conhecido como NTLM) ou LDAP
`MoinMoin.auth.http.http`
pelo moin através de LDAP
`MoinMoin.auth.ldap_login.ldap_login` (é necessário combinar com with moin_session para manter a sessão)
Apache+SSL com CGI, modpy ou Fast``Cgi
pelo Apache através do certificado de cliente SSL
`MoinMoin.auth.sslclientcert.sslclientcert`
Twisted
HTTP Basic (não solicita autenticação no cabeçalho, sendo apenas útil para algo automático, não para utilização do navegador)
`MoinMoin.auth.http.http`
IIS
HTTP Basic, SSPI (também conhecido como NTLM), (?)
`MoinMoin.auth.http.http`, (?)
Outros métodos "auth"
Este não são apenas métodos de autenticação, uma vez que não autenticam utilizadores, mas utilizam a informação da autenticação para outros fins:
`MoinMoin.auth.log.log`
apenas registará a entrada/saída/nome, nada mais
Plugins Enviados
moin_login e moin_session auth (por omissão)
Esta é a lista de autenticações que o moin utiliza por omissão (se só quiser isso, não é necessário configurá-la).
O `moin_session` deve ser sempre incluído, uma vez que gere a cookie de sessão que é útil mesmo que não a utilize para se autenticar. Ela gere o estado da sessão. Para mais informações, consulte o tópico AjudaComSessões.
moin_anon_session
Ver AjudaComSessões.
Autenticação http
Para activar a autenticação http tem de adicionar as seguintes linhas ao `wikiconfig.py`:
No caso de utilizar a autenticação HTTP basic num servidor web como o Apache, o servidor web lida com a autenticação antes de chamar o moin. Ou insere um nome de utilizador e uma senha válidos ou o seu acesso será negado pelo servidor web.
Assim o método de autenticação http do moin verificará se a autenticação do utilizador ocorreu:
- se sim, devolverá um objecto baseado no nome do utilizador autenticado.
- se não, não devolverá um objecto de utilizador. Neste exemplo, não existem outros métodos de autenticação. O utilizador permanecerá desconhecido.
Bem, na verdade, isto é de facto um pouco mais complicado:
- No Twisted, armazenamos o nome de utilizador e a senha no perfil de utilizador do moin. Excepto a utilização do wiki xmlrpc, que não é utilizado actualmente .
- No NTLM e Negotiate, separamos tudo o que existe antes da última "\" (normalmente é "Domínio\nome de utilizador") e utilizamos também o title() para normalizar o "nome de utilizador" para "Nome de utilizador".
Deve querer definir `user_autocreate = True` para este método de autenticação. O moin criará então um perfil de utilizador automaticamente se o utilizador autenticado não tiver já um. Assim, o utilizador não necessita de criar um perfil do moin.
Veja também AjudaNaInstalação/ApacheEmWin32ComAutenticaçãoDeDomínio, para obter algumas instruções específicas para win32.
Autenticação sslclientcert
Para activar a autenticação através de certificados de cliente SSL, tem de adicionar as seguintes linhas ao `wikiconfig.py`:
No caso de utilizar o SSL client certificate auth com um servidor web como o Apache, o servidor web lida com a autenticação antes de chamar o moin. Ou tem um certificado de cliente SSL válido ou o seu acesso será negado pelo servidor web.
Assim o método de autenticação sslclientcert verificará se a autenticação do utilizador ocorreu:
- se sim, devolverá um objecto baseado no endereço de correio electrónico ou no nome do utilizador existente no certificado.
- se não, não devolverá um objecto de utilizador. Neste exemplo, não existem outros métodos de autenticação. O utilizador permanecerá desconhecido.
Deve querer definir `user_autocreate = True` para este método de autenticação. O moin criará então um perfil de utilizador automaticamente se o utilizador autenticado não tiver já um. Assim, o utilizador não necessita de criar um perfil do moin.
php_session
Para activar a integração Single-Sign-On com aplicações PHP, utilize este módulo. Lê ficheiros de sessão PHP e, por isso, integra directamente com sistemas existentes de autenticação PHP.
Para utilizar este módulo, utilize as seguintes linhas de código na sua configuração:
php_session has the following parameters:
1 php_session(apps=['egw'], s_path="/tmp", s_prefix="sess_")
- `apps` é uma lista de aplicações activadas
- `s_path` é o caminho para os ficheiros de sessão PHP
- `s_prefix` é o prefixo dos ficheiros de sessão PHP
A única aplicação PHP suportada actualmente é o eGroupware 1.2. Mas deve ser fácil adicionar novas linhas de código para extrair a informação necessária da sessão PHP.
Interwiki auth
O seu wiki moin 1.6 consegue comunicar com outro wiki moin 1.6 para autenticar utilizadores (e transferir perfis de utilizadores):
Se quiser utilizar isto, tem de inserir `"OutroWiki NomeDeUtilizador"` no campo de acesso (sem as aspas), o campo da senha obtém a senha para o utilizador `NomeDeUtilizador` no wiki `OutroWiki`.
O OutroWiki tem de estar no seu mapa de interwikis, para que o moin possa fazê-lo. Tem de ser igualmente um membro da lista dos `trusted_wikis` na configuração do seu wiki.
LDAP auth
Veja o tópico /LDAP.
Método pseudo-auth do SMB
Este método não faz realmente uma autenticação, apenas intercepta o utilizador/senha da cadeia de autenticação para fazer as suas próprias tarefas - montar algum share do smb ao aceder, desmontar ao sair:
smb_server = "smb.example.org" # nome de servidor do smb smb_domain = 'DOMAIN' # nome de domínio do smb smb_share = 'FILESHARE' # share do smb que montamos smb_mountpoint = u'/mnt/wiki/%(username)s' # onde montamos o sistema de ficheiros do smb smb_display_prefix = u"S:" # onde é normalmente montado o //servidor/share para os utilizadores de windows (por motivos de apresentação apenas) smb_dir_user = "wwwrun" # dono das directorias montadas smb_dir_mode = "0700" # modo das directorias montadas smb_file_mode = "0600" # modo dos ficheiros montados smb_iocharset = "iso8859-1" # "UTF-8" > não é possível aceder sem biblioteca partilhada! smb_coding = 'iso8859-1' # codificação utilizada para codificar a linha de comandos para o comando mount smb_verbose = True # se True, coloque a informação de debug do SMB no log smb_log = "/dev/null" # para onde redireccionamos o resultado do comando mount
Isto é para aplicações muito especiais. Se não sabe como utilizar, provavelmente não necessita disto.
wiki auth
Este método foi apresentado com wikisync.
1 import xmlrpclib
2
3 name = "TestUser"
4 password = "secret"
5 wikiurl = "http://localhost:8080"
6
7 homewiki = xmlrpclib.ServerProxy(wikiurl + "?action=xmlrpc2", allow_none=True)
8 auth_token = homewiki.getAuthToken(name, password)
9
10 mc = xmlrpclib.MultiCall(homewiki)
11 mc.applyAuthToken(auth_token)
12 result = mc()
Combinar vários métodos de autenticação
Por exemplo, para combinar as autenticações http e cookie, o seu `wikiconfig.py` deve conter:
Neste exemplo, o moin irá verificar primeiramente se o método de autenticação http fornece um utilizador válido. Se fornecer, usará apenas isso. Se não e se o `continue_flag` devolvido pelo método de autenticação http for True, continuará a verificar a lista de outros métodos de autenticação - `moin_login` e `moin_session` neste caso...
Claro que nem todas as combinações fazem sentido.
Criar o seu próprio método de autenticação
Para ver exemplos de como fazer autenticação, consulte o fragmento comentado do ficheiro config `contrib/auth_externalcookie/` e `MoinMoin/auth/*.py` no seu arquivo de distribuição do moin.
Eis um pequeno resumo do que é actualmente possível:
- utilizar o formulário de acesso `?action=login` como interface do utilizador do seu método de autenticação para inserir o nome e a senha
- utilizar a acção de acesso `?action=logout` para sair com o seu método de autenticação
- pesquisar perfis de utilizador existentes para um utilizador "correspondente" (a correspondência pode não ser o nome, pode ser o endereço de correio electrónico ou algo que colocar no nome-alias)
criar um objecto do utilizador e permitir que memorize quais os atributos determinados pelo método de autenticação (e que por isso não devem constar nas PreferênciasDoUtilizador)
- actualizar valores no perfil do utilizador com dados fornecidos externamente
- criar perfis de utilizador automaticamente